Numpy:根据列索引数组设置每行的1个元素

时间:2016-06-22 21:11:55

标签: python arrays numpy

假设我有以下数组:

@Subscribe
public void onMyEvent(MyEvent myEvent){
    String text = myEvent.getText();
    //Now you can do whatever you wish with this text
}

现在如何根据数组b指示的列索引在数组a到1的每一行上设置一个元素?我需要的是一个如下所示的数组c:

a = np.zeros([4,3])
b = np.asarray([0,1,2,1])

或者,有没有办法直接将数组b转换为数组c?

2 个答案:

答案 0 :(得分:2)

这是advanced indexing的工作:

a[np.arange(a.shape[0]), b] = 1

对于数组AIJ,其中IJ具有整数dtype且形状相同,A[I, J]选择所有条目A[I[n], J[n]]的{​​{1}}。然后,分配将这些条目设置为A

答案 1 :(得分:1)

您可以使用cb直接从max获取b (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.]])

示例运行 -

{{1}}
相关问题