使用索引同时从 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 中行索引的列表lq 中的每一行都应该添加到该列表中. 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.atnp.add.at(f, l, q)

【讨论】:

以上是关于使用索引同时从 numpy 2D 数组的行中减去多个值的主要内容,如果未能解决你的问题,请参考以下文章

在 numpy 中从具有索引的 2D 矩阵构建 3D 布尔矩阵

使用数组索引的numpy数组的2D索引[重复]

在 NumPy 数组的行中的特定位置插入零行

NumPy:在 3D 切片中使用来自 argmin 的 2D 索引数组

从 NumPy 数组中选择特定的行和列

有效地减去不同形状的numpy数组