对数组的连续元素组求和

时间:2015-03-25 19:28:03

标签: arrays matlab

考虑数组

A = [x1,x2,x3,...,xn]

然后你可以通过简单的方法在Matlab中将两个连续的数字一起添加到数组中,这样就得到:

B = [x1+x2, x3+x4,...]

请注意,每个元素只出现在一个总和中。

7 个答案:

答案 0 :(得分:8)

使用sumreshape -

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;

方法1

B = filter( ones(groupsize,1), 1, A )
B = B(groupsize:groupsize:end)

B = 3 7 11 15

方法2

B = conv(A,ones(groupsize,1))
B = B(groupsize:groupsize:end)

B = 3 7 11 15 9

优于Divakar'sRatberts'sJolek's 解决方案的优势在于它也适用于不能按群组大小分割的向量A 。请注意,在这种情况下,我的两种方法对于最后一个元素略有不同。

答案 5 :(得分:0)

如果您假设A具有偶数个元素(xn是偶数),则这里有一个解决方案:

  • 将奇数元素提取到名为odd_arr
  • 的子数组
  • 将偶数元素提取到名为even_arr的子数组
  • 将两个子阵列一起添加以生成B

这是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)