无论怎么想,我都不是 Python 专家,但这个让我难住了。要么,要么我错过了一些非常明显的东西。它必须是两者之一。
我有两个 numpy 数组,a
和 b
。 a
应该是 b
的真子集。为了证实这一点,我产生了集合差异:
>>> np.setdiff1d(a, b)
array([], dtype=float64)
如预期。 a
因此是 b
的子集。
除非我对 setdiff1d
的理解是错误的,我想这可能是错误的,但我重新阅读了文档,它指出 setdiff1d
返回一个:
Sorted 1D array of values in ar1 that are not in ar2.
好吧,这里发生了一些奇怪的事情。我有一些值 p
。如果 a
确实是 b
的子集,则以下语句应为真:
如果p
在a
中,那么p
也在b
中
当试图确认这一点时,我得到:
>>> p in a
True
>>> p in b
False
所以我不确定到底发生了什么,我希望有人能指出我的愚蠢错误并大笑。
最佳答案
setdiff1d
和您的其他方法检查数字是否精确相等。由于浮点错误,您的数字很可能不完全相等。如果您想进行 float 比较,则应该使用非常小的 epsilon。
if abs(a - b) < 1e-12:
disp('equal!')
关于python - Numpy 奇怪的行为 - 健全性检查。这怎么可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38624827/