< p >为什么在涉及
我猜测这可能是与
除了在 docs 中的这个注释:“NaN 值被传播,也就是说,如果至少有一个项目是 NaN,则相应的最小值也将是 NaN。要忽略 NaN 值(MATLAB 行为),请使用 nanmin。”,我没有找到任何解释该行为背后原理的东西。这是想要的行为还是特定内部表示
np.min
或np.argmin
的任何比较中,NaN
被认为小于-np.inf
?< /p >
import numpy as np
In [73]: m = np.array([np.nan, 1., 0., -np.inf])
In [74]: n = np.array([-np.inf, 1., 0., np.nan])
# Huh??
In [75]: np.min(m)
Out[75]: nan
In [76]: np.min(n)
Out[76]: nan
# Same for np.argmin
In [77]: np.argmin(m)
Out[77]: 0
In [78]: np.argmin(n)
Out[78]: 3
# Its all false!
In [79]: np.nan < -np.inf
Out[79]: False
In [80]: np.nan > -np.inf
Out[80]: False
# OK, that seems to fix it, but its not necessarily elegant
In [81]: np.nanmin(m)
Out[81]: -inf
In [82]: np.nanargmin(m)
Out[82]: 3
我猜测这可能是与
NaN
值比较时返回 False
的任何副作用有关,然而当你的数组中“偶尔”出现 NaN
值时,这会导致一些相当烦人的影响。使用 np.nanmin
或 np.nanargmin
有些感觉像是一个快速修复,被随意地添加到现有行为之上。除了在 docs 中的这个注释:“NaN 值被传播,也就是说,如果至少有一个项目是 NaN,则相应的最小值也将是 NaN。要忽略 NaN 值(MATLAB 行为),请使用 nanmin。”,我没有找到任何解释该行为背后原理的东西。这是想要的行为还是特定内部表示
NaN
值的副作用?为什么?
np.nan
与任何其他数字(包括它本身)相比都是无序的,不会引发错误。虽然它小于某些数,但也大于并且不等于任何其他数字 - 包括它本身。这是IEEE 754的一部分。实现细节是NaN是否被视为信号或静默处理。Numpy是静默处理的。 - dawg