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))' –