【问题标题】: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