使用索引数组更改numpy数组

时间:2015-05-21 16:42:04

标签: numpy

我有一个numpy数组: A=np.zeros((5,10)) 并且我想根据另一个数组N=np.array([7, 2, 9, 4, 5])

更改每行中的一个值

喜欢:A[:,N]=1;

0   0   0   0   0   1   0   0   0   0
0   0   1   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   1
0   0   0   0   1   0   0   0   0   0
0   0   0   0   0   1   0   0   0   0

我该怎么做?

1 个答案:

答案 0 :(得分:3)

由于您要为每行设置一个元素,您需要使用arange(5)对第一个轴进行幻想索引。这可以被认为是设置索引(I0[0], N[0])=(0,7)(I0[1],N[1])=(1,2),...

I0 = np.arange(A.shape[0])
A[I0, N] = 1
A
=> 
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.]])
A.nonzero()
=> (array([0, 1, 2, 3, 4]), array([7, 2, 9, 4, 5]))