我试图让这个循环更有效率地运行。
关于论点的一些介绍:
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
非常感谢。
答案 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);