2016-09-17 60 views
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]] 

[[ 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文件中读取上面的掩码数组。第一个切片如下所示:从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) 

如何用0.0替换8.99999983e + 20值?我认为这些都是fill_values但使用ma.set_fill_value(val, 0.0)不起作用(它只改变`fill_value为0.0,但不改变8.99999983e + 20

+1

你有没有试过定期基于numpy的替换?例如'val [val> 1e20] = 0.0' – N1B4

+0

谢谢@ N1B4,确实有效。如果你可以把它写成答案,我会接受 – user308827

回答

1

蒙面阵列很酷的事情是,数据和掩码分离,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)应该做的伎俩