首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >矩阵均值>x

矩阵均值>x
EN

Stack Overflow用户
提问于 2013-09-24 07:28:49
回答 2查看 182关注 0票数 1

我需要计算矩阵的平均值,但只计算那些大于指定数的值。现在我带着这样的想法:

代码语言:javascript
运行
复制
Media = mean(W_tot_migl,2);

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

有没有办法避免创建另一个矩阵H = W_tot_migl

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-24 08:02:16

对于矩阵H和阈值T,可以使用:

代码语言:javascript
运行
复制
M = nanmean(H+0./(H>T),2);

就你而言:

代码语言:javascript
运行
复制
Media_b = nanmean(W_tot_migl+0./(W_tot_migl>LimiteInferiore),2);

或者自己计算:

代码语言:javascript
运行
复制
M = sum(H.*(H>T),2)./sum(H>T,2);

就你的情况而言:

代码语言:javascript
运行
复制
Media_b = sum(W_tot_migl.*(W_tot_migl>LimiteInferiore),2)./sum(W_tot_migl>LimiteInferiore,2);

请注意,如果行中没有大于阈值的值,则这两个方法都返回NaN

但是,通常您可以使用accumarray来完成这一任务:

代码语言:javascript
运行
复制
H2 = H>T;
[I,~] = find(H2);
M = accumarray(I, H(H2), [size(H,1) 1], @mean);

如果一行中没有大于阈值的元素,则此方法返回零。

票数 1
EN

Stack Overflow用户

发布于 2013-09-24 07:59:51

从你想要的评论来看:

代码语言:javascript
运行
复制
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则给出其他值。我相信您不需要NaN平均值,因为NaN值不会计算为>treshold

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18975460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档