加快matlab索引子阵列的速度?

时间:2014-09-13 15:53:58

标签: matlab indexing

如何加快以下操作?瓶颈是第三条线,即使对于A1的大尺寸,第四条线也很快。第三行是否实际上复制了存储在A1中的A(b,b)?

A = randn(1000,1000);
b = [67   145   200   185    11   166    80   137   163   132   133    19]; %random 
A1 = A(b,b);
v=A1*A(2,b)';

请注意,以下内容同样缓慢,因此我将该行拆分为两部分,以证明上面的第三行是瓶颈。

v=A(b,b);*A(2,b)';

1 个答案:

答案 0 :(得分:0)

看看这是否会让它更快地替代你声称是瓶颈的第三条线 -

[x,y]= ndgrid(b,b);
A1 = A((y-1)*size(A,1)+x);

或者

A1 = A(bsxfun(@plus,(b-1)*size(A,1),b'));

编辑:使用上面列出的代码进行分析后,运行时性能看起来并没有提高很多。您在评论中提到您在循环中多次使用这些代码,而b会有所不同。如果循环计数是一个很小的值并且b是这些循环迭代之间的常数,那么可以想到在所有迭代中执行所有那些矩阵向量乘法到一个大的矩阵 - 矩阵乘法,但这不是&#39在这里的情况。所以,在这一点上我会说,indexing的瓶颈可能不得不停留。