【问题标题】:Is there a way to sum pairwise in Octave, vectorized (ie. mapping and reducing matrices)?有没有办法在 Octave 中成对求和,矢量化(即映射和减少矩阵)?
【发布时间】:2023-03-14 06:57:01
【问题描述】:

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

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

例如

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

=> [ 3 7 
     5 9
     ...
    ]


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

【问题讨论】:

  • 如果以下任何答案对您有用,请accept it。如果不是,请对这些答案发表评论,说明为什么不这样做,或编辑您的问题以澄清。

标签: matrix octave matrix-multiplication


【解决方案1】:

这里还有一些选项。

给定:

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

【讨论】:

    【解决方案2】:

    也许有人有更好的主意:

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

    给予

    b =
    
       3   7
       5   9
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-27
      • 2021-12-18
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多