1

行列の平均を計算する必要がありますが、指定された数値より大きい値に対してのみです。今、私はこの考えに行き着きました:

Media = mean(W_tot_migl,2);

H = W_tot_migl;
H(H<LimiteInferiore) = nan;
Media_b = nanmean(H,2);

別のマトリックスを作成しないようにする方法はありますH = W_tot_miglか?

4

2 に答える 2

1

マトリックスHとしきい値Tには、次を使用できます。

M = nanmean(H+0./(H>T),2);

あなたの場合:

Media_b = nanmean(W_tot_migl+0./(W_tot_migl>LimiteInferiore),2);

または自分で計算します。

M = sum(H.*(H>T),2)./sum(H>T,2);

あなたの場合:

Media_b = sum(W_tot_migl.*(W_tot_migl>LimiteInferiore),2)./sum(W_tot_migl>LimiteInferiore,2);

NaN行にしきい値を超える値がない場合、両方のメソッドが返されることに注意してください。

accumarrayただし、一般に、これを達成するために使用できます。

H2 = H>T;
[I,~] = find(H2);
M = accumarray(I, H(H2), [size(H,1) 1], @mean);

行にしきい値より大きい要素がない場合、このメソッドはゼロを返します。

于 2013-09-24T08:02:16.307 に答える
0

コメントから判断すると、これが必要です:

H = magic(5); %Suppose this is your matrix
LimiteInferiore = 23; %And suppose this is your treshold

Media_b= NaN(size(H,1),1); %Or perhaps zeros, whatever you like to show by default

idx = any(H > treshold,2);
Media_b(idx) = mean(H(H>treshold),2);

存在する場合は rowmean を、そうでない場合は NaN を返します。NaN 値は として評価されないため、 NaN mean は必要ないと思います>treshold

于 2013-09-24T07:59:51.837 に答える