2017-05-26 25 views
1

巨大な配列上のすべての列の平均を計算する必要があります。まずゼロより小さいすべての数値をゼロで置き換える必要があります。私のおもちゃの例を使用すると、これらの計算にかなりの時間がかかることが明らかになります。MATLAB:巨大な配列の平均を計算する

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

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

私はいくつかのスピードを上げるためのより良い方法があるかもしれないのだろうか?

+3

呼び出す必要があることを忘れないでください負でない数字だけです。負の数を0で置き換えていますが、これは別のものです。また、各列の平均を計算しています。それはあなたが欲しいものですか? –

+0

@ルイスメンドはい、まさに私が欲しいものです。 – Andi

+1

つまり、 'a = [ - 10 -10 10 11]'となります。あなたは 'a'、' 10.5'の "正の平均"を望んでいますが、あなたは '[0 0 10 11]'の平均をとって '5.25'を取っています。 'result = mean(tmp(tmp> = 0))'を試してください。 –

答えて

4

アレイ内の値を見つけて置き換えるのは非常に高価です。代わりに、次の操作を行います。私のPCで

% 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(:))

関連する問題