我需要在一个巨大的数组中计算所有列的平均值wherby我必须首先用零替换所有小于零的数字。使用我的玩具示例,很明显这些计算需要相当长的时间。
tmp = -5 + 10 * rand(5000,100000);
tmp(tmp<0) = 0;
result = mean(tmp);
我想知道是否有更好的方法来获得一些速度?
答案 0 :(得分:4)
在数组中查找值然后替换它们是一项非常昂贵的操作。相反,请执行以下操作:
% slooooooow
tic
tmp(tmp<0)=0;
mean(tmp);
toc
% faaaaaaaaaast
tic
tmp=max(tmp,0);
mean(tmp);
toc
在我的电脑中,报告:
Elapsed time is 5.940434 seconds.
Elapsed time is 0.358057 seconds.
请记住,如果您希望获得单个均值,则应致电mean(tmp(:))