[英]Construct a matrix in Matlab that keeps track of equal elements in each row
[英]Construct a matrix in Matlab where each element is obtained by summing all other elements in the same row
我在矩阵MxN
有一个零和一的矩阵A
我想构造一个尺寸为MxN
的矩阵B
,其中B(i,j)
是通过对与i
不同的所有h
求和A(h,j)
获得的。
这是我当前的代码
A=randi([0 1],2097144,20); %2097144x20
B = @( )bsxfun(@minus,sum(A(:,2:end),2),A(:,2:end)); %2097144x20
timeit(B)
这大约需要 0.5秒
您可以更快地提出建议吗?
由于以下注释,已编辑的问题:代码正确; 我对此的解释是错误的; 正确的解释是
我在矩阵MxN
有一个零和一的矩阵A
我想构造一个维度为MxN
的矩阵B
,其中B(i,j)
是通过对与j
不同的所有h
求和A(i,h)
获得的。
我假设您要多次调用该代码。 如果您想使用许多不同的矩阵A调用它,那么据我所知,您或多或少地感到不走运-mex可以为您提供一些帮助-您也许可以将其提高2倍或3,但您基本上是受内存限制的。
另一方面,如果您正在做一些更细微的事情,则取决于当前的特定问题-也许您可以使用并行工具箱或gpu。
您的代码不执行您所说的。 您想沿列(跨行)求和。 此外,为什么要跳过第一列。 根据您的要求,正确的行是
B = bsxfun(@minus,sum(A,1),A);
大约快4倍。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.