2017-05-26 65 views
1

我需要计算一个巨大阵列上所有列的平均值,我必须首先用零替换所有小于零的数字。以我的玩具为例,很明显这些计算需要相当长的时间。MATLAB:在一个巨大的阵列上计算平均值

tmp = -5 + 10 * rand(5000,100000); 

tmp(tmp<0) = 0; 
result = mean(tmp); 

我想知道是否有更好的方法来获得一些速度?

+3

你没有考虑到只有非负数。你用0代替负数,这是另一回事。此外,您正在计算每列的平均值;那是你要的吗? –

+0

@LuisMendo是的,这正是我想要的。 – Andi

+1

换句话说,'a = [ - 10 -10 10 11]'。你想要“a”,“10.5”的“正面意思”,但是你这样做的方式是采用“5.25”的“[0 0 10 11]”的意思。试试'result = mean(tmp(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(:))