使用索引同时从 numpy 二维数组的行中减去多个值
Subtract multiple values from row of numpy 2D-array at the same time, using indices
我有一个二维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
中与 [= 中最后一个重复索引相对应的行23=]。所以相反,我得到:
[
[3,3,3],
[0,0,0],
[1,1,1]
]
这意味着它正在这样做:
f[2] += q[1]
f[0] += q[3]
如何将 q
中的多行添加到 f
中的同一行,只需要列表 l
?
尝试 np.add.at
:np.add.at(f, l, q)
我有一个二维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
中与 [= 中最后一个重复索引相对应的行23=]。所以相反,我得到:
[
[3,3,3],
[0,0,0],
[1,1,1]
]
这意味着它正在这样做:
f[2] += q[1]
f[0] += q[3]
如何将 q
中的多行添加到 f
中的同一行,只需要列表 l
?
尝试 np.add.at
:np.add.at(f, l, q)