Применить маску к массиву в Numpy - PullRequest
1 голос
/ 10 июля 2020

У меня проблема, которую я не могу решить, и я надеюсь, что вы можете мне помочь. Предположим, у меня есть массив с формой 146 243, у меня около 144 терм. (12 месяцев на 12 лет) Существуют определенные индексы, которые всегда должны иметь значения np.nan, и я хочу, чтобы они всегда содержали nan-значения, но я понятия не имею, как это сделать. Я зашел так далеко. (Этот пример имеет правильную форму, но есть только два случая для np.nan, у меня гораздо больше в моем фактическом массиве.)

import numpy as np

rand_array = np.random.rand(146,243)
# In every new array those positions should always be np.nan
rand_array[0][90] = np.nan
rand_array[12][15] = np.nan
# Searching for nan-Values
nan_vals = np.argwhere(np.isnan(rand_array))

# Next Iteration
rand_array_2 = np.random.rand(146,243)
# Apply the nan values at the position found by nan_vals to rand_array_2 at the same positions

Этот пример довольно простой, и я мог бы просто вручную установить nan .values, но в моем проблемном массиве слишком много значений, чтобы этот метод был применим. Как мне go узнать о том, чтобы однажды узнать, где находятся значения np.nan, чтобы применить их к каждому последовательному массиву? Поскольку у меня их положение сохранено в nan_val, мне просто нужно выяснить, как применить его к другому массиву.

С уважением.

1 Ответ

0 голосов
/ 10 июля 2020

Numpy дает очень много возможностей.

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

rand_array_2[nan_vals[:, 0], nan_vals[:, 1]] = np.nan

Это установит (для вашего данного примера) rand_array_2[0, 90] и rand_array_2[12, 15] как nan

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