Допустим, у меня есть пустой массив A
следующим образом:
A =
array([[0, 2],
[1, 2],
[0, 1]])
Я создал логический массив B
, используя np.zeros
следующим образом.
B =
array([[False, False, False],
[False, False, False],
[False, False, False]])
Теперь я хотел создать массив C
, где он дает значение True на основе индекса столбца A
.
Так,
C =
array([[True, False, True],
[False, True, True],
[True, True, False]])
Вы можете сделать это, используя некоторые относительно продвинутые методы индексации Numpy:
In [27]: B[np.arange(A.shape[0])[:,None], A] = True
In [28]: B
Out[28]:
array([[ True, False, True],
[False, True, True],
[ True, True, False]])
np.arange(A.shape[0])[:,None]
создает следующий массив
array([[0],
[1],
[2]])
для использования в качестве индексов для первой оси массива B
. Здесь [:,None]
используется для преобразования одномерного объекта range
в двумерный массив для соответствия индексам второй оси (массив A
), который является двумерным.