在全零的numpy数组的每一行中,由另一numpy数组给出的特定列索引处为1

问题描述

我有一个给定大小的数组,例如全零的4x4,

a = np.zeros((4,4))

我想在另一行给定的列索引的每一行中放入1

b = np.array([0,1,2,1])

所以结果数组应该像这样

a = 
1   0   0   0
0   1   0   0
0   0   1   0
0   1   0   0

在给定大小为(mxn)的b的情况下,如何对大小为(mx1)的大型数组执行此操作。

感谢您和最诚挚的问候,

解决方法

您可以使用以下简单的方法为2D数组建立索引:

>>> a[np.arange(len(a)),b] = 1
>>> a
array([[1.,0.,0.],[0.,1.,0.]])
,

使用a遍历b中的行和zip()中的值:

for row,idx in zip(a,b):
    row[idx] = 1