【问题标题】:Average sequence rows MATLAB one column at a time平均序列行MATLAB一次一列
【发布时间】:2015-10-15 18:01:11
【问题描述】:

我有一个位于变量m1 中的数据数组,即288 X 13 数组。我需要为每列平均 24 行 12 次。我曾多次尝试通过计算平均值来使用该指数we,但我得到的答案不正确。我想要的结果 (meanf1) 是一个 12 X 13 数组,显示每列数据的 12 行平均值。谢谢!

we = 1    25    49    73    97   121   145   169   193   217   241   265

    for ii = 1:13;
        for jj = 1:12;
            meanf1(jj,ii) = mean(m1(we(jj):we(jj)+23,ii));
        end;
    end`

【问题讨论】:

  • 我不明白你想要什么。你能给我们看一个小的数值例子吗?
  • 你能告诉我们为什么你认为你的答案是错误的吗?
  • 与我手动或手动进行平均时相比,平均值有所偏差,有时我会在应该有平均值的地方得到零。我需要找出一种方法来平均 24 个值,然后跳到下一个 24 个值并取一个平均值,然后跳到下一个 24 个值并取一个平均值,总共执行 12 次。这样做 12 次后,我需要对下一列做同样的事情,我有 13 列。我需要的结果是 12 行乘 13 列的平均值数组。我希望这是有道理的!谢谢!!
  • 这段代码看起来不错。你的手动计算有问题吗?
  • 平均超过 24 行或重复 12 次的值。然后,我需要以相同的方式在下一列中重复平均 - 一次平均 24 行,重复 12 次到 row == 288 然后移动到下一列。期望的结果是 12 行乘 13 列的平均值。谢谢!

标签: matlab sequence average rows


【解决方案1】:

鉴于we 创建的规则间隔,您可以重新整形然后使用mean,就像这样 -

meanf1 = reshape(mean(reshape(m1(1:288,1:13),24,[]),1),12,13);

【讨论】:

    【解决方案2】:

    这里有一些小错误。在我看来,调整您的版本的最简单方法是将 jj 更改为您想要的“我们”中的数字。您也不需要使用 2 for 循环,因为您可以使用一维作为 vecot。这是一种可能的解决方案,但我觉得它不是最好的。

        m1=rand(288,13);
    
        meanf1=ones(12,13); %preallocation is always better
        i=1;
        for jj = 1:24:265 ;
            meanf1(i,:) = mean(m1(jj:jj+23,:));
            i=i+1;
        end;
    

    【讨论】:

      【解决方案3】:

      这应该可行:

      for jj = 1:12    
          meanf1(jj,:) = mean(m1((floor((1:288)./24) == jj),:));    
      end
      

      一个补充...... 这取决于你想如何平均......你可能还想考虑使用 ceil

      meanf1(jj,:) = mean(m1((ceil((1:288)./24) == jj),:));
      

      【讨论】:

        猜你喜欢
        • 2017-09-17
        • 2017-07-20
        • 1970-01-01
        • 1970-01-01
        • 2016-09-02
        • 1970-01-01
        • 1970-01-01
        • 2011-03-24
        • 1970-01-01
        相关资源
        最近更新 更多