给定nxN矩阵A.我想找到矩阵行的运行平均值.为此,我做了:
mean = cumsum(A, 2); for k = 1:N mean(:, k) = mean(:, k)/k; end
但是对于大N来说这需要一段时间.在MATLAB中有更有效的方法吗?
注意:根据我帖子末尾的一些粗略基准,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).