Dic*_*man 6 python arrays numpy
import numpy as np
import numpy.ma as ma
"""This operates as expected with one value masked"""
a = [0., 1., 1.e20, 9.]
error_value = 1.e20
b = ma.masked_values(a, error_value)
print b
"""This does not, all values are masked """
d = [0., 1., 'NA', 9.]
error_value = 'NA'
e = ma.masked_values(d, error_value)
print e
Run Code Online (Sandbox Code Playgroud)
如何使用'nan','NA','None'或类似的值来表示缺少数据?
您是从文本文件或类似文件中获取数据吗?如果是这样,我建议genfromtxt直接使用该函数来指定您的掩码值:
In [149]: f = StringIO('0.0, 1.0, NA, 9.0')
In [150]: a = np.genfromtxt(f, delimiter=',', missing_values='NA', usemask=True)
In [151]: a
Out[151]:
masked_array(data = [0.0 1.0 -- 9.0],
mask = [False False True False],
fill_value = 1e+20)
Run Code Online (Sandbox Code Playgroud)
我认为你的例子中的问题是你用来初始化 numpy 数组的 python 列表具有异构类型(浮点数和字符串)。这些值被强制转换为 numpy 数组中的字符串,但该masked_values函数使用浮点相等产生奇怪的结果。
这是通过创建具有对象数据类型的数组来克服此问题的一种方法:
In [152]: d = np.array([0., 1., 'NA', 9.], dtype=object)
In [153]: e = ma.masked_values(d, 'NA')
In [154]: e
Out[154]:
masked_array(data = [0.0 1.0 -- 9.0],
mask = [False False True False],
fill_value = ?)
Run Code Online (Sandbox Code Playgroud)
您可能更喜欢第一个解决方案,因为结果具有浮点数据类型。