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.,'NA',9.]
error_value = 'NA'
e = ma.masked_values(d,error_value)
print e
如何使用’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)
我认为你的例子中的问题是你用来初始化numpy数组的python列表有异构类型(浮点数和字符串).这些值被强制转换为numpy数组中的字符串,但masked_values
函数使用浮点相等而产生奇怪的结果.
这是通过创建具有对象dtype的数组来克服此问题的一种方法:
In [152]: d = np.array([0.,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],fill_value = ?)
您可能更喜欢第一个解决方案,因为结果具有float dtype.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。