我有两个 (x,y) 坐标的 Numpy 数组。我想找到第一个数组中不在第二个数组中的所有点。坐标是浮点数。它们应该只有很少的数字(例如 1.25,但不是 1.123456)。但它们是计算的结果,所以浮点不精确是一个因素。
对this question的评论指出,在here中找到了适合浮点数的答案。但是在检查了答案之后,我不清楚它们中的任何一个是否会导致浮点不精确。
对我的解决方案是这样的:
import numpy as np
a1 = np.array([[1.2, 2.3], [1.0, 1.1]])
a2 = np.array([[1.0, 1.1], [5.2, 2.2]])
a1_not_a2 = []
a2_set = set(tuple(point) for point in a2.round(decimals=5).tolist())
for point in a1.round(decimals=5).tolist():
if tuple(point) not in a2_set:
a1_not_a2.append(point)
但是我不确定我的解决方案是否总是有效,而且速度很慢。我有两个问题:
(1)
round(decimals=5)
之后比较浮点数是否保证产生正确的输出?
(2) 有没有更好的方法得到我的结果?我的数组很大,所以使用带有
np.allclose
的嵌套 for 循环很慢。