注意: 根据我帖子末尾的一些粗略基准,zeeMonkeez 的解决方案是最快的。
怎么样
N = 1000;
A = rand(N, N);
m = cumsum(A, 2);
m1 = zeros(size(m));
tic
for j = 1:1000;
for k = 1:N
m1(:, k) = m(:, k)/k;
end
end
toc
经过的时间是 6.971112 秒。
tic
for j = 1:1000
n = repmat(1:N, N, 1);
m2 = m./n;
end
toc
经过的时间是 2.471035 秒。
在这里,您将问题转换为矩阵乘法(而不是按元素划分,而是将一个矩阵除以另一个矩阵)。您想要除以的矩阵如下所示:
[1, 2, 3, ..., N;
1, 2, .....
.
.
1, 2, .... ]
您可以使用repmat 获得。
编辑:基准
@zeeMonkeez 使用的 bsxfun 甚至更快。对于上述情况(我的系统上的差异为 10%)和更大的矩阵(N = 10000),在这种情况下,我的版本实际上表现最差(35 秒,OP 为 30 秒,zeeMonkeez 的解决方案为 23 秒)。