Скопируйте и замените значения в массиве numpy. Nans будет nan, но другие значения будут равны нулю - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть массив NumPy, который я хочу скопировать в другой массив NUMPY и заменить все значения на ноль, кроме значений NAN.Можете ли вы помочь, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Одним из способов является использование numpy.where.

Данные @ GrantWilliams.

Задача 1

import numpy as np

a = np.array([1, 2, np.nan, 4, 5, np.nan])
c = np.array([10, 11, 12, 13, 14, 15])

res1 = np.where(np.isnan(a), np.nan, 0)

array([  0.,   0.,  nan,   0.,   0.,  nan])

Задача 2

res2 = np.where(np.isnan(a), c, 0)

array([ 0,  0, 12,  0,  0, 15])
0 голосов
/ 25 апреля 2018

Если вы хотите установить массив 0, тогда я думаю, что нет необходимости копировать исходный массив. Просто создайте массив нулей и установите соответствующие индексы для nan.

import numpy as np

a = np.array([1, 2, np.nan, 4, 5, np.nan])
b = np.zeros(a.shape)
b[np.isnan(a)] = np.nan

выходы

>>> b
[ 0.  0. nan  0.  0. nan]

edit: теперь, когда вы обновили проблему, вы можете использовать это вместо:

import numpy as np

a = np.array([1, 2, np.nan, 4, 5, np.nan])
b = np.zeros(a.shape)
c = np.array([10, 11, 12, 13, 14, 15])
b[np.isnan(a)] = c[np.isnan(a)]

print(b)

1010 * выходы *

>>> b
[ 0.  0. 12.  0.  0. 15.]

не стесняйтесь менять dtype на int, если это то, что вы также используете

...