【问题标题】:Matrix mean of values >x值的矩阵平均值 > x
【发布时间】:2013-09-29 07:20:54
【问题描述】:

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

Media = mean(W_tot_migl,2);

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

有什么方法可以避免创建另一个矩阵H = W_tot_migl

【问题讨论】:

  • 请注意,您的解决方案当前尝试​​取值 &gt;= x 的平均值,而不是 &gt; x。确保确定您想要什么并将其包含在您的最终结果中。

标签: matlab matrix mean large-data


【解决方案1】:

从你想要的cmets来看:

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 值不会评估为 &gt;treshold

【讨论】:

    【解决方案2】:

    对于矩阵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);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 2014-05-16
      • 2016-10-23
      • 2016-08-16
      • 2022-01-05
      • 2018-09-23
      • 2021-02-21
      相关资源
      最近更新 更多