行列の平均を計算する必要がありますが、指定された数値より大きい値に対してのみです。今、私はこの考えに行き着きました:
Media = mean(W_tot_migl,2);
H = W_tot_migl;
H(H<LimiteInferiore) = nan;
Media_b = nanmean(H,2);
別のマトリックスを作成しないようにする方法はありますH = W_tot_migl
か?
行列の平均を計算する必要がありますが、指定された数値より大きい値に対してのみです。今、私はこの考えに行き着きました:
Media = mean(W_tot_migl,2);
H = W_tot_migl;
H(H<LimiteInferiore) = nan;
Media_b = nanmean(H,2);
別のマトリックスを作成しないようにする方法はありますH = W_tot_migl
か?
マトリックス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);
行にしきい値より大きい要素がない場合、このメソッドはゼロを返します。
コメントから判断すると、これが必要です:
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
。