1

我试图让这个循环更有效地运行。

关于论点的一些介绍:

A是二维数组。B 是一维数组。其余的都是整数。

这是代码:

for k = c:len_sim 
    A(k,1:(end-k+c)) = A(k,1:(end-k+c)) + B((k-c+1):end); 
end

非常感谢。

4

2 回答 2

3

您对行而不是列进行操作。由于 Matlab 中的矩阵是按列排列的,因此以下代码更有效:

for k = c:len_sim 
    A(1:(end-k+c),k) = A(1:(end-k+c),k) + B((k-c+1):end); 
end

我的计算机上的示例系统:

A = rand(3000, 3000);
B = rand(3000, 1)';

c = 10;
len_sim = c+1000;

时代(你的实施和我的)

Elapsed time is 0.114862 seconds.
Elapsed time is 0.038503 seconds.

因此,您只需转换系统即可获得 3 倍的加速。当然,如果您需要明确地进行转置,则可能不值得。但是,如果您可以重新制定整个算法,那么这就是要走的路。

于 2013-04-27T09:31:35.520 回答
0
k=c:len_sim;
A(k,1:(end-k+c)) = A(k,1:(end-k+c)) + B((k-c+1):end);
于 2013-04-27T09:02:03.760 回答