替换掩码numpy数组中的值不起作用

时间:2016-07-08 01:15:56

标签: python numpy masked-array

我有这个人。 numpy中的蒙面数组,名为arr with shape(50,360,720):

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 = 1e+20)

它有一个人。 arr [0]中的数据:

arr[0].data

array([[-999., -999., -999., ..., -999., -999., -999.],
       [-999., -999., -999., ..., -999., -999., -999.],
       [-999., -999., -999., ..., -999., -999., -999.],
       ..., 
       [-999., -999., -999., ..., -999., -999., -999.],
       [-999., -999., -999., ..., -999., -999., -999.],
       [-999., -999., -999., ..., -999., -999., -999.]])

-999。是missing_value,我想用0.0替换它。我这样做:

arr[arr == -999.] = 0.0

然而,即使在此操作之后,arr仍保持不变。如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

也许你想要filled。我将说明:

In [702]: x=np.arange(10)    
In [703]: xm=np.ma.masked_greater(x,5)

In [704]: xm
Out[704]: 
masked_array(data = [0 1 2 3 4 5 -- -- -- --],
             mask = [False False False False False False  True  True  True  True],
       fill_value = 999999)

In [705]: xm.filled(10)
Out[705]: array([ 0,  1,  2,  3,  4,  5, 10, 10, 10, 10])

在这种情况下,filled会用填充值替换所有蒙版值。如果没有参数,它将使用fill_value

np.ma使用此方法执行许多计算。例如,其sum与我用0填充所有蒙版值相同。prod会将它们替换为1.

In [707]: xm.sum()
Out[707]: 15
In [709]: xm.filled(0).sum()
Out[709]: 15

filled的结果是一个常规数组,因为所有被屏蔽的值都被替换为' normal'。