1
我需要计算一个巨大阵列上所有列的平均值,我必须首先用零替换所有小于零的数字。以我的玩具为例,很明显这些计算需要相当长的时间。MATLAB:在一个巨大的阵列上计算平均值
tmp = -5 + 10 * rand(5000,100000);
tmp(tmp<0) = 0;
result = mean(tmp);
我想知道是否有更好的方法来获得一些速度?
我需要计算一个巨大阵列上所有列的平均值,我必须首先用零替换所有小于零的数字。以我的玩具为例,很明显这些计算需要相当长的时间。MATLAB:在一个巨大的阵列上计算平均值
tmp = -5 + 10 * rand(5000,100000);
tmp(tmp<0) = 0;
result = mean(tmp);
我想知道是否有更好的方法来获得一些速度?
在数组中查找值然后替换它们是非常昂贵的操作。相反,做到以下几点:
% 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(:))
你没有考虑到只有非负数。你用0代替负数,这是另一回事。此外,您正在计算每列的平均值;那是你要的吗? –
@LuisMendo是的,这正是我想要的。 – Andi
换句话说,'a = [ - 10 -10 10 11]'。你想要“a”,“10.5”的“正面意思”,但是你这样做的方式是采用“5.25”的“[0 0 10 11]”的意思。试试'result = mean(tmp(tmp> = 0))' –