我需要计算矩阵的平均值,但仅限于那些大于指定数字的值。现在我有这个想法:
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 值不会评估为>treshold
.