我需要計算矩陣的平均值,但只適用於那些大於指定數值的值。現在我帶着這樣的想法:矩陣的值的平均值> x
Media = mean(W_tot_migl,2);
H = W_tot_migl;
H(H<LimiteInferiore) = nan;
Media_b = nanmean(H,2);
有什麼辦法,以避免創建另一個矩陣H = W_tot_migl
?
我需要計算矩陣的平均值,但只適用於那些大於指定數值的值。現在我帶着這樣的想法:矩陣的值的平均值> x
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);
如果它存在和NaN否則會給你的rowmean。我相信你不會需要NaN的意思,因爲NaN值不會評估爲>treshold
。
請注意,您的解決方案目前嘗試採用值>> = x'的均值,而不是'> x'。確保決定你想要什麼,並將其包含在最終結果中。 –