在Matlab中构造一个矩阵,其中每个元素通过对同一行中的所有其他元素求和来获得

时间:2017-03-22 17:16:20

标签: matlab

我在维度A的Matlab中有一个零MxN的矩阵B。我想构建一个维MxN的矩阵B(i,j),其中A(h,j)是通过对hi来获得与A=randi([0 1],2097144,20); %2097144x20 B = @( )bsxfun(@minus,sum(A(:,2:end),2),A(:,2:end)); %2097144x20 timeit(B) 不同的A得到的。

这是我目前的代码

MxN

需要约。 0.5秒

你能更快地提出建议吗?

感谢以下评论编辑问题:代码正确无误;我对它的解释是错误的;正确的解释是

我在维度B的Matlab中有一个零MxN的矩阵B(i,j)。我想构建一个维A(i,h)的矩阵h,其中j是通过对{{1}}求{{1}}来获得与{{1}}不同的{{1}}得到的。

2 个答案:

答案 0 :(得分:1)

I assume that you want to call the code a large number of times. If you want to call it with many different matrices A, then as far as I can see, you are more or less out of luck - mex can help you somewhat - you may be able to speed it up by say a factor of 2 or 3 but you are basically memory bound.

If on the other hand you are doing something more subtle, then it depends on the specific problem at hand - perhaps you can use the parallel toolbox or the gpu.

答案 1 :(得分:-1)

您的代码不符合您的要求。您希望沿着列进行求和(跨越行)。此外,为什么你跳过第一列。根据您的要求,正确的行将是

B = bsxfun(@minus,sum(A,1),A);

大约快4倍。