数组

时间:2016-10-23 23:39:39

标签: arrays matlab mean

我有一个数组如下:

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

如何获得每两列的平均值,结果为:

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

2 个答案:

答案 0 :(得分:3)

使用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

根据您对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

额外索引将最后一个元素附加到奇数长度,因此最终平均值只是最终元素。

答案 1 :(得分:0)

使用卷积怎么样?

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)