替换掩码numpy数组中的NaN

时间:2017-01-04 23:56:51

标签: python numpy

var[np.isnan(var)] = 0.0

var.shape
(50, 360, 720)

我想用0.0替换数组中的NaN。但是,我收到错误:*** IndexError: Index cannot be multidimensional

var[0]

masked_array(data =
 [[-- -- -- ..., -- -- --]
 [-- -- -- ..., -- -- --]
 [-- -- -- ..., -- -- --]
 ..., 
 [-- -- -- ..., -- -- --]
 [-- -- -- ..., -- -- --]
 [-- -- -- ..., -- -- --]],
             mask =
 [[ True  True  True ...,  True  True  True]
 [ True  True  True ...,  True  True  True]
 [ True  True  True ...,  True  True  True]
 ..., 
 [ True  True  True ...,  True  True  True]
 [ True  True  True ...,  True  True  True]
 [ True  True  True ...,  True  True  True]],
       fill_value = nan)

如何解决?

1 个答案:

答案 0 :(得分:1)

nan_to_num是正确的方法。这是一个2D示例:

In [25]: arr = np.array([[10, 20], [np.nan, 30], [np.nan, -10]])

In [26]: arr
Out[26]: 
array([[ 10.,  20.],
       [ nan,  30.],
       [ nan, -10.]])

In [27]: np.nan_to_num(arr)
Out[27]: 
array([[ 10.,  20.],
       [  0.,  30.],
       [  0., -10.]])

我相信nan_to_num也适用于蒙面数组。例如:

In [33]: mx = ma.masked_array([np.nan, 2, 3, 4], mask=[0, 0, 1, 0])

In [34]: mx.compressed()
Out[34]: array([ nan,   2.,   4.])

现在:

In [36]: np.nan_to_num(ma.masked_array([np.nan, 2, 3, 4], mask=[0, 0, 1, 0])).compressed()
Out[36]: array([ 0.,  2.,  4.])