我试图让这个循环更有效地运行。
关于论点的一些介绍:
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
非常感谢。
我试图让这个循环更有效地运行。
关于论点的一些介绍:
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
非常感谢。
您对行而不是列进行操作。由于 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 倍的加速。当然,如果您需要明确地进行转置,则可能不值得。但是,如果您可以重新制定整个算法,那么这就是要走的路。
k=c:len_sim;
A(k,1:(end-k+c)) = A(k,1:(end-k+c)) + B((k-c+1):end);