Доступ к j-му элементу в каждой строке 2D массива numpy с помощью оператора двоеточия?

#python #arrays #numpy

#python #массивы #numpy

Вопрос:

Учитывая 2D массив numpy a , я могу получить доступ к j-му элементу в каждой строке следующим образом:

 >>> import numpy as np
>>> a = np.zeros((3,3))
>>> a
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])
>>> j = np.array([0,1,0])
>>> j
array([0, 1, 0])
>>> i = np.arange(3)
>>> i
array([0, 1, 2])
>>> a[i,j] = 1
>>> a
array([[1., 0., 0.],
       [0., 1., 0.],
       [1., 0., 0.]])
 

Однако я ожидал бы, что доступ к строкам с помощью оператора двоеточия приведет к тому же:

 >>> b = np.zeros((3,3))
>>> b[:,j] = 1
>>> b
array([[1., 1., 0.],
       [1., 1., 0.],
       [1., 1., 0.]])
 

Возможно ли добиться такого же поведения, как показано в первом примере, используя операторы двоеточия?
Как мне нужно изменить массив j ?

Комментарии:

1. Есть ли причина, по которой вы хотите использовать только двоеточие? Я не знаю такого способа доступа к элементам так, как вам нравится, с помощью двоеточия

2. a[i,j] примерно эквивалентно [a[x,y] for x,y in zip(i,j)] , это сопряжение элементов i и j (через broadcasting ) . a[:,j] означает взять все строки (фрагмент) и j столбцы. Нет ничего похожего на трансляцию списка / массива.

3. @Ehsan: Причина просто в том, чтобы углубить мое понимание numpy. Мой предлагаемый метод просто хорош с функциональной точки зрения.

4. На этой странице много прочитанного и понятного indexing , numpy.org/doc/stable/reference/arrays.indexing.html