在matlab中运行矩阵的均值

use*_*257 4 matlab

给定nxN矩阵A.我想找到矩阵行的运行平均值.为此,我做了:

mean = cumsum(A, 2);
for k = 1:N
    mean(:, k) = mean(:, k)/k;
end
Run Code Online (Sandbox Code Playgroud)

但是对于大N来说这需要一段时间.在MATLAB中有更有效的方法吗?

lhc*_*eva 5

注意:根据我帖子末尾的一些粗略基准,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
Run Code Online (Sandbox Code Playgroud)

经过的时间是6.971112秒.

tic
for j = 1:1000
n = repmat(1:N, N, 1);
m2 = m./n;
end
toc
Run Code Online (Sandbox Code Playgroud)

经过的时间是2.471035秒.

在这里,您将问题转换为矩阵乘法(而不是按元素划分,将一个矩阵除以另一个矩阵).您希望除以的矩阵如下所示:

[1, 2, 3, ..., N;
 1, 2, .....
 .
 .
 1, 2, ....     ]
Run Code Online (Sandbox Code Playgroud)

您可以使用repmat获得.

编辑:基准

@zeeMonkeez使用的bsxfun甚至更快.对于上述情况(在我的系统上有10%的差异)以及更大的矩阵(N = 10000),在这种情况下,我的版本实际上表现最差(35秒,与OP相比30,从zeeMonkeez的解决方案中为23).