Python - 强制nan值以获得特定值

时间:2014-11-14 14:42:45

标签: python arrays numpy mask

我使用了一个掩码来处理数组,现在我想强制“nan”获得一定的值(每个例子0个......)

使用中等数组的简单示例,我有:

[[[nan, nan], [nan, nan], [nan, nan], [nan, nan]], [[2, 0], [2, 2], [nan, nan], [nan, nan]], [[2, 2], [2, 0], [2, 1], [2, 2]]]

我想得到一个数组:

[[0, 0], [0, 0], [0, 0], [0, 0]], [[2, 0], [2, 2], [0, 0], [0, 0]], [[2, 2], [2, 0], [2, 1], [2, 2]]]

2 个答案:

答案 0 :(得分:3)

使用numpy.nan_to_num

可以轻松实现这一目标
>>> import numpy as np
>>> a = np.array([[np.nan, 0], [1, 2]])
>>> a
array([[ nan,   0.],
       [  1.,   2.]])
>>> a = np.nan_to_num(a)
>>> a
array([[ 0.,  0.],
       [ 1.,  2.]])

请注意,此会创建一个新数组,它不会原位更改原始数据。

答案 1 :(得分:1)

在作业的左侧使用带有numpy.isnan的布尔索引。

>>> a
array([[[ nan,  nan],
        [ nan,  nan]],

       [[  2.,   0.],
        [ nan,  nan]],

       [[  2.,   2.],
        [  2.,   0.]]])
>>> a[np.isnan(a)] = 0
>>> a
array([[[ 0.,  0.],
        [ 0.,  0.]],

       [[ 2.,  0.],
        [ 0.,  0.]],

       [[ 2.,  2.],
        [ 2.,  0.]]])
>>>