繁体   English   中英

在Matlab中构造一个矩阵,其中每个元素都是通过将同一行中的所有其他元素相加而获得的

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM