使用索引同时从 numpy 2D 数组的行中减去多个值
Posted
技术标签:
【中文标题】使用索引同时从 numpy 2D 数组的行中减去多个值【英文标题】:Subtract multiple values from row of numpy 2D-array at the same time, using indices 【发布时间】:2022-01-20 21:32:23 【问题描述】:我有一个二维的numpy
数组f
,例如:
f = np.array(
[
[0,0,0],
[0,0,0],
[0,0,0]
]
)
还有另一个二维数组q
,例如:
q = np.array(
[
[1,1,1],
[1,1,1],
[2,2,2],
[3,3,3]
]
)
q
中的每一行都应该添加到f
中的某一行,而我只有f
中行索引的列表l
,q
中的每一行都应该添加到该列表中. l
的长度等于q
中的行数。例如:
l = [0,2,0,0]
这意味着我想做这样的事情:
f[l] += q
应该将f
转换为:
[
[6,6,6],
[0,0,0],
[1,1,1]
]
即我期待它这样做:
f[0] += q[0]
f[2] += q[1]
f[0] += q[2]
f[0] += q[3]
但是当l
中的某些索引重复时(本例中为索引0
),它只会添加q
中与l
中最后一个重复索引相对应的行。所以相反,我得到:
[
[3,3,3],
[0,0,0],
[1,1,1]
]
这意味着它正在这样做:
f[2] += q[1]
f[0] += q[3]
如何将q
中的多行添加到f
中的同一行中,只需要列表l
?
【问题讨论】:
【参考方案1】:试试np.add.at
:np.add.at(f, l, q)
【讨论】:
以上是关于使用索引同时从 numpy 2D 数组的行中减去多个值的主要内容,如果未能解决你的问题,请参考以下文章
在 numpy 中从具有索引的 2D 矩阵构建 3D 布尔矩阵