我在维度A
的Matlab中有一个零MxN
的矩阵B
。我想构建一个维MxN
的矩阵B(i,j)
,其中A(h,j)
是通过对h
求i
来获得与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}}得到的。
答案 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倍。