使这个简短的matlab循环更有效率

时间:2013-04-27 08:45:41

标签: matlab

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

关于论点的一些介绍:

A是二维数组。 B是1维阵列。其余的是整数。

以下是代码:

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

非常感谢。

2 个答案:

答案 0 :(得分: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倍的加速。当然,如果你需要明确地进行转置,它可能不值得。但是,如果您可以重新构建整个算法,那么这就是要走的路。

答案 1 :(得分:0)

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