Numpy логическое индексирование, если число в списке - PullRequest
0 голосов
/ 05 марта 2020

У меня есть следующий массив:

x = np.array([
    [2, 0],
    [5, 0],
    [1, 0],
    [8, 0],
    [6, 0]])

Я узнал, что вы можете использовать логические операции для изменения выбранных значений в массиве numpy. Если я хочу изменить значение 2-го столбца на 1 для строк, где 1-е значение равно 2, 5 или 8, я могу сделать следующее:

x[x[:, 0] == 2, 1] = 1
x[x[:, 0] == 5, 1] = 1
x[x[:, 0] == 8, 1] = 1

, который изменяет вывод на:

[[2 1]
 [5 1]
 [1 0]
 [8 1]
 [6 0]]

Если бы это был "нормальный" python код, я знаю, что мог бы сделать:

if value in [2, 5, 8]: ...

Вместо:

if value == 2 or value == 5 or value == 8: ...

Есть ли сокращение сделать что-то подобное с numpy массивами?

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Вы можете объединить np.isin() с np.where():

x[:,1] = np.where(np.isin(x[:,0], [2,5,8]), 1, 0)
0 голосов
/ 05 марта 2020

Вы можете использовать numpy isin метод:

x[np.isin(x[:, 0], [2, 5, 8]), 1] = 1
...