我只是尝试使用屏蔽数组来过滤掉一些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
会返回正确的布尔数组,但掩码似乎不起作用。为什么我的面具不能像我期望的那样工作?
答案 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
答案 1 :(得分:1)
这是另一种不使用面具的替代方案:
import numpy as np
#x = [nan, -0.35, nan]
xmask=x[np.logical_not(np.isnan(x))]
print(xmask)
结果:
array([-0.35])