numpy: преобразовать несколько назначений в одно, используя OR - PullRequest
0 голосов
/ 08 октября 2018

taxi_modified является двумерным символом ndarray.

Код, приведенный ниже, работает, но кажется непитоническим:

taxi_modified[taxi_modified[:, 5] == 2, 15] = 1
taxi_modified[taxi_modified[:, 5] == 3, 15] = 1
taxi_modified[taxi_modified[:, 5] == 5, 15] = 1

Необходимо присвоить 1 для col в индексе 15, если col виндекс 5 равен 2, 3, или 5.

Ниже не работает:

taxi_modified[taxi_modified[:, 5] == 2 | 3 | 5, 15] = 1

1 Ответ

0 голосов
/ 08 октября 2018

Вы можете использовать необычное индексирование с np.isin (NumPy v1.13 +) или np.in1d для более старых версий.

Вот демонстрация:

# example input array
A = np.arange(16).reshape((4, 4))

# calculate Boolean mask for rows
mask = np.isin(A[:, 1], [1, 5, 13])

# assign values, converting mask to integers
A[np.where(mask), 2] = -1

print(A)

array([[ 0,  1, -1,  3],
       [ 4,  5, -1,  7],
       [ 8,  9, 10, 11],
       [12, 13, -1, 15]])

В одну строку можно записать:

A[np.where(np.isin(A[:, 1], [1, 5, 13])), 2] = -1
...