Numpy: изменение значений в массиве numpy по индексам и условию - PullRequest
0 голосов
/ 28 января 2020

Я новичок в numpy, и у меня возникают проблемы с простым управлением массивами numpy.

Я выполняю задачу, в которой говорится, что циклов следует избегать в максимально возможной степени. и мне нужно отредактировать значения массива через другой массив индексов.

indexes # [3, 16]
y # [0. 1. 1. 1. 0. 1. 0. 0. 0. 0. 1. 1. 1. 0. 1. 0. 0. 0. 1. 1.]
y[indexes] = 2 # [0. 1. 1. 2. 0. 1. 0. 0. 0. 0. 1. 1. 1. 0. 1. 0. 2. 0. 1. 1.]

Но мне не нужно просто менять значение на 2. Мне нужно сделать условное изменение. Это то, что у меня есть, но мне нужно что-то вроде

y[indexes] = 0 if y[indexes] == 1 else 0 
>>> [0. 1. 1. 0. 0. 1. 0. 0. 0. 0. 1. 1. 1. 0. 1. 0. 1. 0. 1. 1.]

И в строке выше должны быть результаты.

Это ответ l oop way, но мне нужен numpy путь, если существует:

for index in indexes:
    y[index] = 1 if y[index] == 0 else 0

Заранее спасибо.

1 Ответ

0 голосов
/ 29 января 2020

Не знаю, понял ли я ваш вопрос. Но я надеюсь, что это поможет вам.

tip 01

import numpy as np 
indexes = [1, 5, 7] # index list
y = np.array([9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]) #array example
y[indexes][2] #3rd(0,1,>>2<<) item of y array (1,5,>>7<<). 

В этом случае y [7] равно 16.

tip 02

Это также может быть полезно.

y = np.array([0,1,1,0,3,0,1,0,1,0])
y

массив ([0, 1, 1, 0, 3, 0, 1, 0, 1, 0])

np.where(y != 1, y, 0)
y

массив ( [0, 0, 0, 0, 3, 0, 0, 0, 0, 0])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...