凭空想像力,我不是Python专家,但是这一点让我感到困惑。要么就是我丢失了完全显而易见的东西。它必须是两者之一。

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

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


如预期的那样。因此,ab的子集。
除非我对setdiff1d的理解是错误的,否则我可能会认为这是错的,但是我重新阅读了文档,并指出setdiff1d返回a:


  ar1中不在ar2中的值的排序一维数组。


好的,这是奇怪的地方。我有一些值p。如果a确实是b的子集,则以下内容应为true语句:
如果pa中,则p也在b

尝试确认这一点时,我得到:

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


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

最佳答案

setdiff1d和您的其他方法检查数字是否完全相等。由于浮点错误,您的数字很有可能不完全相等。如果要进行浮点比较,则应改用非常小的epsilon。

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

10-01 21:40