从netCDF替换数组中的值

2024-04-24 10:26:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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]]

 [[ 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]]

 [[ 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]]

 ..., 
 [[ 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]]

 [[ 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]]

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

我正在从netCDF文件读取上面的屏蔽数组。第一个切片如下所示:

val[0].data
array([[  8.99999983e+20,   8.99999983e+20,   8.99999983e+20, ...,
          8.99999983e+20,   8.99999983e+20,   8.99999983e+20],
       [  8.99999983e+20,   8.99999983e+20,   8.99999983e+20, ...,
          8.99999983e+20,   8.99999983e+20,   8.99999983e+20],
       [  8.99999983e+20,   8.99999983e+20,   8.99999983e+20, ...,
          8.99999983e+20,   8.99999983e+20,   8.99999983e+20],
       ..., 
       [  8.99999983e+20,   8.99999983e+20,   8.99999983e+20, ...,
          8.99999983e+20,   8.99999983e+20,   8.99999983e+20],
       [  8.99999983e+20,   8.99999983e+20,   8.99999983e+20, ...,
          8.99999983e+20,   8.99999983e+20,   8.99999983e+20],
       [  8.99999983e+20,   8.99999983e+20,   8.99999983e+20, ...,
          8.99999983e+20,   8.99999983e+20,   8.99999983e+20]], dtype=float32)

如何将8.99999983e+20值替换为0.0?我认为这些是fill\u值,但是使用ma.set_fill_value(val, 0.0)不起作用(它只将'fill\u值更改为0.0,但不会更改8.9999983e+20)


Tags: 文件truedatavalue切片masknetcdfval
1条回答
网友
1楼 · 发布于 2024-04-24 10:26:53

屏蔽数组的酷之处在于数据和屏蔽是分开的。fill_value属性只影响被屏蔽数组的filled()方法,而不影响数据:

>>> import numpy as np
>>> x = np.ma.array([1, 2, 3, 4], mask=[0, 0, 1, 1])
>>> x
masked_array(data = [1 2    ],
             mask = [False False  True  True],
       fill_value = 999999)

>>> x.filled()
array([     1,      2, 999999, 999999])
>>> x.set_fill_value(-999)
>>> x.filled()
array([   1,    2, -999, -999])
>>> x.data
array([1, 2, 3, 4])

对你来说

val.set_fill_value(0)
print val.filled()

或者只要val.filled(0)就可以了。你知道吗

相关问题 更多 >