Присвоение значения массиву numpy с помощью логической маски: как? - PullRequest
1 голос
/ 23 января 2020

Я пытаюсь присвоить значение по заданному c индексу вектору numpy, к которому я сначала хочу применить логическую маску (критически, я хочу, чтобы мои индексы ссылались на «маскированный» массив) , Однако, как ни странно, следующее не работает:

Допустим, я хочу изменить первое значение вектора «valid» (того, где маска имеет значение True), т. Е. Второе «absolute» значение вектора.

import numpy as np

x = np.full(4, np.nan)
mask = np.array([False, True, True, True])
index = 0

x[mask][index] = 3
x 
>>> array([nan, nan, nan, nan])

Что я делаю не так?

1 Ответ

1 голос
/ 23 января 2020

index в конце будет обрабатываться, как вы индексируете готовую маску, вот доказательство:

>>> x[mask]
array([ nan,  nan,  nan])
>>> x[mask][index]
nan
>>> 

Таким образом, оно фактически меняет nan на 3, но что nan нигде не хранится, поэтому ничего не изменится, используйте:

x[np.where(mask)[0][index]] = 3
print(x) 
...