有没有办法在 Octave 中成对求和,向量化(即映射和减少矩阵)?

Is there a way to sum pairwise in Octave, vectorized (ie. mapping and reducing matrices)?

有没有办法在 Octave 中进行成对求和?

如果我有一个 10 行 4 列的例子。我想要一个新的 10 行 2 列,其中每列都是对的总和。

例如

[ 1 2 3 4
  2 3 4 5 
  ...
]           

=> [ 3 7 
     5 9
     ...
    ]


我知道如何使用 for 循环和 accumarray 等来完成此操作,但我不确定是否有完全矢量化的方法来完成此操作。

也许有人有更好的主意:

a = [1 2 3 4; 2 3 4 5]
b = reshape (sum (reshape (a.', 2, [])), [], rows(a)).'

给予

b =

   3   7
   5   9

这里还有几个选项。

鉴于:

a = reshape(1:40, 10, 4)
a =

    1   11   21   31
    2   12   22   32
    3   13   23   33
    4   14   24   34
    5   15   25   35
    6   16   26   36
    7   17   27   37
    8   18   28   38
    9   19   29   39
   10   20   30   40

保持简单

b = [sum(a(:,1:2),2) sum(a(:,3:4),2)]
b =

   12   52
   14   54
   16   56
   18   58
   20   60
   22   62
   24   64
   26   66
   28   68
   30   70

挤一点

b = squeeze(sum(reshape(a, [], 2, 2), 2))
b =

   12   52
   14   54
   16   56
   18   58
   20   60
   22   62
   24   64
   26   66
   28   68
   30   70

或者,我个人最喜欢的...

数学魔法

b = a * [1 1 0 0; 0 0 1 1].'
b =

   12   52
   14   54
   16   56
   18   58
   20   60
   22   62
   24   64
   26   66
   28   68
   30   70