Python Numpy面具NaN无法正常工作

时间:2015-01-26 23:21:11

标签: python numpy

我只是尝试使用屏蔽数组来过滤掉一些nan条目。

import numpy as np
# x = [nan, -0.35, nan]
x = np.ma.masked_equal(x, np.nan)
print x

这输出以下内容:

masked_array(data = [        nan -0.33557216         nan],
         mask = False,
   fill_value = nan)

np.isnan()上调用x会返回正确的布尔数组,但掩码似乎不起作用。为什么我的面具不能像我期望的那样工作?

2 个答案:

答案 0 :(得分:9)

您可以使用np.ma.masked_invalid

import numpy as np

x = [np.nan, 3.14, np.nan]
mx = np.ma.masked_invalid(x)

print(repr(mx))
# masked_array(data = [-- 3.14 --],
#              mask = [ True False  True],
#        fill_value = 1e+20)

或者,使用np.isnan(x)作为mask=的{​​{1}}参数:

np.ma.masked_array

为什么原始方法不起作用?因为,相反违反直觉,print(repr(np.ma.masked_array(x, np.isnan(x)))) # masked_array(data = [-- 3.14 --], # mask = [ True False True], # fill_value = 1e+20) 不等于NaN

NaN

这实际上是part of the IEEE-754 definition of NaN

答案 1 :(得分:1)

这是另一种不使用面具的替代方案:

import numpy as np
#x = [nan, -0.35, nan]
xmask=x[np.logical_not(np.isnan(x))]
print(xmask)

结果:

array([-0.35])