我有这个人。 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仍保持不变。如何解决这个问题?
答案 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'。