【发布时间】: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 ...];
【问题讨论】:
我有一个数组如下:
arr=[2 3 4 5 6 7 8 9 1 2 3 4];
怎样才能得到每两列的平均值,所以结果是:
ans=[2.5 4.5 6.5 8.5 ...];
【问题讨论】:
使用reshape、sum 和除以 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
额外的索引附加了奇数长度的最终元素,因此最终平均值就是最终元素。
【讨论】:
使用卷积怎么样?
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)
【讨论】: