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