在任何想象中我都不是Python专家,但这个让我感到难过。无论是那个还是我都错过了一些完全明显的东西。它必须是两者中的一个。
我有两个numpy数组,a
和b
。 a
应该是b
的正确子集。为了确认这一点,我产生了设定差异:
>>> np.setdiff1d(a, b)
array([], dtype=float64)
正如所料。因此,a
是b
的子集。
除非我对setdiff1d
的理解是错误的,我认为它可能是错误的,但我重新阅读了文档,并指出setdiff1d
返回:
在ar1中对不在ar2中的1D数组值进行排序。
好的,这里发生了一些奇怪的事情。我有一些价值p
。如果a
确实是b
的子集,则以下内容应为真实陈述:
如果p
位于a
,则p
也位于b
在尝试确认时,我得到:
>>> p in a
True
>>> p in b
False
所以我不确定到底发生了什么,我希望有人能指出我的愚蠢错误并大笑。
答案 0 :(得分:1)
setdiff1d
和您的其他方法检查完全相等的数字。由于浮点错误,您的数字很可能完全相等。如果你想进行浮点比较,你应该使用一个非常小的epsilon。
if abs(a - b) < 1e-12:
disp('equal!')