当前位置:  开发笔记 > 编程语言 > 正文

在matlab中运行矩阵的均值

如何解决《在matlab中运行矩阵的均值》经验,为你挑选了1个好方法。

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

mean = cumsum(A, 2);
for k = 1:N
    mean(:, k) = mean(:, k)/k;
end

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



1> lhcgeneva..:

注意:根据我帖子末尾的一些粗略基准,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).

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有