我有一个numpy数组,我想复制到另一个numpy数组并将所有值替换为零,除了nan值。你能帮忙吗?
答案 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])