在numpy数据中获取掩码值

时间:2016-02-11 02:36:22

标签: python numpy

我有一个numpy蒙面数组:

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 = 65536.0)

当我这样做时:

numpy.unique(arr.data)

我明白了:

array([  0.00000000e+00,   1.00000000e+00,   2.00000000e+00,
         3.00000000e+00,   4.00000000e+00,   5.00000000e+00,
         6.55360000e+04])

如何在arr.data中获取屏蔽值?

1 个答案:

答案 0 :(得分:1)

  

当我这样做时:

numpy.unique(arr.data)
     

如何在arr.data中获取屏蔽值?

arr.data与蒙面值无关 - 相反,它是一个普通的老numpy.array:

import numpy as np
import numpy.ma as ma

my_data = np.array([10])
print(repr(my_data))

x = ma.array(
    data = my_data,
    mask = [True],
    fill_value = 65536.0
)
print(repr(x))
print(repr(x.data))

--output:--
array([10])

masked_array(data = [--],
             mask = [ True],
       fill_value = 65536)

array([10])

并且,当您在数组上调用unique()时,您将获得作为一维数组的唯一元素:

import numpy as np
import numpy.ma as ma

data = np.array([
    [1.0, 2.0, 3.0],
    [4.0, 5.0, 65536.0],
])

print(np.unique(data))

--output:--

[  1.00000000e+00   2.00000000e+00   3.00000000e+00   4.00000000e+00
   5.00000000e+00   6.55360000e+04]

这是你的蒙面数组:

data = np.array([
    [1.0, 2.0, 3.0],
    [4.0, 5.0, 65536.0],
])

mask = [
    [True, True, True],
    [True, True, True],
]

x = ma.array(
    data=data,
    mask=mask,
    fill_value = 65536.0
)

print(repr(x))
masked_array(data =
 [[-- -- --]
 [-- -- --]],
             mask =
 [[ True  True  True]
 [ True  True  True]],
       fill_value = 65536.0)
print(
   np.unique(x.data)
)    
[  1.00000000e+00   2.00000000e+00   3.00000000e+00   4.00000000e+00
   5.00000000e+00   6.55360000e+04]