考虑数组
A = [x1,x2,x3,...,xn]
然后你可以通过简单的方法在Matlab中将两个连续的数字一起添加到数组中,这样就得到:
B = [x1+x2, x3+x4,...]
请注意,每个元素只出现在一个总和中。
答案 0 :(得分:8)
使用sum
和reshape
-
B = sum(reshape(A,2,[]),1)
interp1
基于this
-
nA = numel(A);
start = 1/(2*nA-2);
stop = 1 - start;
B = 2*interp1( linspace(0,1,nA), A,linspace(start,stop,nA/2))
如果正在播放code-golf
,可以使用Communications System Toolbox
中的vec2mat
-
B = sum(vec2mat(A,2),2)
甚至更紧凑 -
B = sum(vec2mat(A,2)')
答案 1 :(得分:5)
尝试类似:
B = A(1:2:end)+A(2:2:end)
答案 2 :(得分:5)
是:
B = A(1:2:end) + A(2:2:end);
最佳,
答案 3 :(得分:4)
如果数字(A)不总是偶数:
accumarray(ceil([1:numel(A)]'/2),A(:))
答案 4 :(得分:2)
以下是通用组大小的另外两种方法:
A = [ 1 2 3 4 5 6 7 8 9 ]
groupsize = 2;
B = filter( ones(groupsize,1), 1, A )
B = B(groupsize:groupsize:end)
B = 3 7 11 15
B = conv(A,ones(groupsize,1))
B = B(groupsize:groupsize:end)
B = 3 7 11 15 9
优于Divakar's,Ratberts's和Jolek's 解决方案的优势在于它也适用于不能按群组大小分割的向量A
。请注意,在这种情况下,我的两种方法对于最后一个元素略有不同。
答案 5 :(得分:0)
如果您假设A具有偶数个元素(xn是偶数),则这里有一个解决方案:
这是Matlab代码(长版):
odd_arr = A(1:2:end);
even_arr = A(2:2:end);
B = odd_arr + even_arr;
以下是简短版本:
B = A(1:2:end) + A(2:2:end);
我希望这适合你。
答案 6 :(得分:0)
这应该可以解决问题
B = downsample(A + [A(2:end), 0], 2)