【问题标题】:Average of each two columns in an array数组中每两列的平均值
【发布时间】:2017-03-05 16:03:48
【问题描述】:

我有一个数组如下:

arr=[2 3 4 5 6 7 8 9 1 2 3 4];

怎样才能得到每两列的平均值,所以结果是:

ans=[2.5 4.5 6.5 8.5 ...];

【问题讨论】:

    标签: arrays matlab mean


    【解决方案1】:

    使用reshapesum 和除以 2 将其转换为两行矩阵:

    >> arr=[2 3 4 5 6 7 8 9 1 2 3 4];
    >> arrbar = sum(reshape(arr,2,[]))/2
    
    arrbar =
    
        2.5000    4.5000    6.5000    8.5000    1.5000    3.5000
    

    将每个 cmets 的解决方案增加到 this answer,我们可以通过一些索引技巧来防止出现奇怪的长度:

    >> arrbar = sum(reshape([arr,arr(end:end-(mod(end,2)==0))],2,[]))/2
    arrbar =
        2.5000    4.5000    6.5000    8.5000    1.5000    3.5000
    
    >> arr=[2 3 4 5 6 7 8 9 1 2 3 4 6];
    >> arrbar = sum(reshape([arr,arr(end:end-(mod(end,2)==0))],2,[]))/2
    arrbar =
        2.5000    4.5000    6.5000    8.5000    1.5000    3.5000    6.0000
    

    额外的索引附加了奇数长度的最终元素,因此最终平均值就是最终元素。

    【讨论】:

      【解决方案2】:

      使用卷积怎么样?

      arr=[2 3 4 5 6 7 8 9 1 2 3 4];
      
      arr2=[1 1];
      
      A=conv(arr,arr2)/2;
      
      mean2=A(2:2:end-1)
      
      plot(mean2)
      

      如果您的数组编号并不总是偶数,并且您想在数组编号为奇数时在结果数组的末尾添加最后一个元素,

      arr=[2 3 4 5 6 7 8 9 1 2 3 4 6];
      
      arr2=[1 1];
      
      A=conv(arr,arr2)/2;
      
      if mod(length(arr),2) == 1;
      
         mean2=[A(2:2:end-1) arr(end)]
      
      else 
         mean2=[A(2:2:end-1)]
      end
      
      plot(mean2)
      

      【讨论】:

      • 如果数组中有一个多余的数字,如何取最后一个元素,例如:arr=[2 3 4 5 6 7 8 9 1 2 3 4 6];所以mean2=2.5000 4.5000 6.5000 8.5000 1.5000 3.5000 6];
      • 我认为如果你想在数组为奇数时在结果数组的末尾添加你的最终元素,你可以用 if 语句做出决定。
      猜你喜欢
      • 2022-08-18
      • 2015-07-22
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 2021-11-08
      相关资源
      最近更新 更多