我有一个数组A
定义为:
[[0, 0],
[0, 0]]
我有一个列表I
,其中包含A
的索引,例如[(0, 1), (1, 0), (1, 1)]
,还有一个列表v
,其中的值与I
中的值一样多,例如[1, 2, 3]
。我想用存储在v
中的相应值替换A
中包含在I
中的索引处的条目。因此,预期结果是:
[[0, 1],
[2, 3]]
我希望能够使用np.put
来实现这一点。我试过:
np.put(A, I, v)
然而,运行上面的行后B
的值是:
[[1., 3.],
[0., 0.]]
为什么put
会有这样的行为,我如何才能实现我所期望的结果?
3条答案
按热度按时间uoifb46i1#
为了补充@阿恩的答案,将索引分解以匹配
put
的通用方法是使用ravel_multi_index
:同样,通用索引方法将是:
修改
A
:3D示例:
输出量:
06odsfpq2#
IIUC,您可以:
图纸:
rnmwe5a23#
np.put()期望索引列表包含整数(而不是元组),索引目标数组的平面版本。你可以改变你的指数来符合这个期望:
然后输出如预期的那样: