2015-05-21 6 views
1

У меня есть массив в NumPy: A=np.zeros((5,10)) , и я хочу, чтобы изменить одно значение в каждой строке с единицами в соответствии с другим массивом N=np.array([7, 2, 9, 4, 5])Изменение Numpy массива с массивом индексов

как: 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 

Как я могу это сделать?

+0

Какая строка каждого столбца? – Zero

ответ

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]))