检查哪些 2D 坐标位于 Numpy 浮点数组中

Check which 2D coordinates are in Numpy array of floats

提问人:Danny 提问时间:4/24/2023 更新时间:4/24/2023 访问量:57

问:

我有两个 (x,y) 坐标的 Numpy 数组。我想找到第一个数组中不在第二个数组中的所有点。坐标是浮点数。它们应该只有几位数字(例如 1.25,但不是 1.123456)。但它们是计算的结果,因此浮点不精确是一个因素。

对这个问题的评论指出,这里可以找到适合浮点数的答案。但是在检查了答案之后,我不清楚其中任何一个都解释了浮点的不精确性。

没错,我的解决方案是这样的:

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) 有没有更好的方法来获得我的结果?我的数组很大,所以使用嵌套的 for 循环很慢。np.allclose

Python NumPy 浮点 精度

评论

0赞 Lutz Lehmann 4/24/2023
根据四舍五入到 2 位(或类似数字,以便在每个方向上获得 10 到 100 的细分)来制作集合图。那么对较小集合的测试应该更快。

答: 暂无答案