首页 > 解决方案 > 有没有办法在 Octave 中成对求和,矢量化(即映射和减少矩阵)?

问题描述

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

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

前任。

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

=> [ 3 7 
     5 9
     ...
    ]


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

标签: matrixoctavematrix-multiplication

解决方案


这里还有一些选择。

鉴于:

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

推荐阅读