复制和替换numpy数组中的值.nans将为nan,但其他值将为零

时间:2018-04-25 16:46:32

标签: python arrays numpy nan

我有一个numpy数组,我想复制到另一个numpy数组并将所有值替换为零,除了nan值。你能帮忙吗?

2 个答案:

答案 0 :(得分:2)

如果你想设置一个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]

编辑:现在你已经更新了问题,你可以改用它:

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)

输出

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

随意将dtype更改为int,如果这也是你正在使用的

答案 1 :(得分:2)

一种方法是使用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])