Python Numpy 掩码 NaN 不工作
Python Numpy mask NaN not working
我只是想使用屏蔽数组来过滤掉一些 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)
在 x
returns 上调用 np.isnan()
正确的布尔数组,但掩码似乎不起作用。为什么我的面罩不能像我预期的那样工作?
您可以使用 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=
参数 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
!
print(np.nan == np.nan)
# False
这实际上是part of the IEEE-754 definition of NaN
这是另一种不使用掩码的替代方法:
import numpy as np
#x = [nan, -0.35, nan]
xmask=x[np.logical_not(np.isnan(x))]
print(xmask)
结果:
array([-0.35])
我只是想使用屏蔽数组来过滤掉一些 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)
在 x
returns 上调用 np.isnan()
正确的布尔数组,但掩码似乎不起作用。为什么我的面罩不能像我预期的那样工作?
您可以使用 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=
参数 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
!
print(np.nan == np.nan)
# False
这实际上是part of the IEEE-754 definition of NaN
这是另一种不使用掩码的替代方法:
import numpy as np
#x = [nan, -0.35, nan]
xmask=x[np.logical_not(np.isnan(x))]
print(xmask)
结果:
array([-0.35])