Python Numpy:基于列索引数组设置每行的1个元素

Python Numpy:基于列索引数组设置每行的1个元素,python,arrays,numpy,Python,Arrays,Numpy,假设我有以下数组: a = np.zeros([4,3]) b = np.asarray([0,1,2,1]) 现在,如何根据数组b指示的列索引将数组a中每行上的元素设置为1?我需要的是一个数组c,如下所示: [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.] [ 0. 1. 0.]] 或者,有没有一种方法可以直接将数组b转换为数组c?您可以使用b的max作为输出数组中的列数,直接从b获取c,如下所示- (b[:,None] == np.arang

假设我有以下数组:

a = np.zeros([4,3])
b = np.asarray([0,1,2,1])
现在,如何根据数组b指示的列索引将数组a中每行上的元素设置为1?我需要的是一个数组c,如下所示:

[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]
 [ 0.  1.  0.]]
或者,有没有一种方法可以直接将数组b转换为数组c?

您可以使用
b
max
作为输出数组中的列数,直接从
b
获取
c
,如下所示-

(b[:,None] == np.arange(b.max()+1)).astype(float) 
样本运行-

In [484]: b
Out[484]: array([0, 1, 2, 1])

In [485]: (b[:,None] == np.arange(b.max()+1)).astype(float)
Out[485]: 
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.],
       [ 0.,  1.,  0.]])
这是一份适合以下人员的工作:


对于数组
A
I
J
,其中
I
J
具有整数数据类型和相同形状,
A[I,J]
选择
A的所有条目
A[I[n],J[n]
。然后,作业将这些条目设置为
1

您认为这个Q足够接近,可以作为dup关闭吗?我们的答案很相似,Divakar和Jaime的答案也很相似。@DSM:是的,这看起来是个合理的欺骗目标。谢谢用户2357112。这正是我想要的@DSM,只是想知道你怎么能这么快找到另一个问题?我确实试着搜索了一会儿,但找不到类似的问题。@Allen:他回答了这个问题后,可能更容易记住这个问题。哦,这是有道理的。现在。谢谢
a[np.arange(a.shape[0]), b] = 1