如何提高以下操作的速度?瓶颈是第三行,尽管对于大尺寸的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)';发布于 2014-09-14 00:07:23
看看这是否能更快地替代你所说的瓶颈第三条线路-
[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是这些循环迭代之间的常量,那么可以考虑在所有迭代中执行所有这些矩阵-向量乘法,并将其转换为一个大的矩阵-矩阵乘法,但这里的情况并非如此。因此,在这一点上,我想说indexing的瓶颈可能不得不留下来。
https://stackoverflow.com/questions/25824948
复制相似问题