Numpy奇怪的行为 - 理智检查。这怎么可能?

时间:2016-07-27 23:33:45

标签: python arrays numpy

在任何想象中我都不是Python专家,但这个让我感到难过。无论是那个还是我都错过了一些完全明显的东西。它必须是两者中的一个。

我有两个numpy数组,aba应该是b的正确子集。为了确认这一点,我产生了设定差异:

>>> np.setdiff1d(a, b)
array([], dtype=float64)

正如所料。因此,ab的子集。 除非我对setdiff1d的理解是错误的,我认为它可能是错误的,但我重新阅读了文档,并指出setdiff1d返回:

  

在ar1中对不在ar2中的1D数组值进行排序。

好的,这里发生了一些奇怪的事情。我有一些价值p。如果a确实是b的子集,则以下内容应为真实陈述: 如果p位于a,则p也位于b

在尝试确认时,我得到:

>>> p in a
True
>>> p in b
False

所以我不确定到底发生了什么,我希望有人能指出我的愚蠢错误并大笑。

1 个答案:

答案 0 :(得分:1)

setdiff1d和您的其他方法检查完全相等的数字。由于浮点错误,您的数字很可能完全相等。如果你想进行浮点比较,你应该使用一个非常小的epsilon。

if abs(a - b) < 1e-12:
    disp('equal!')