0

我知道了。numpy 中的掩码数组称为 arr,形状为 (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。是缺失值,我想用 0.0 替换它。我这样做:

arr[arr == -999.] = 0.0

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

4

1 回答 1

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是一个常规数组,因为所有被屏蔽的值都被替换为“正常”的东西。

于 2016-07-08T02:12:22.907 回答