我有一个N
三个维度的点集合。这些存储为np.array
形状为 的(N,3)
。所有点都是不同的,任意两点之间的最小距离为~1e-5
。我正在寻找一种方法来获得迭代这些点的顺序,这些点既独立于它们当前的顺序,np.array
又对单个组件的小扰动具有鲁棒性。
满足第一个要求的最简单方法是np.lexsort
with
np.lexsort(my_array.T)
然而,这在稳健性部门失败了:
In [6]: my_array = np.array([[-0.5, 0, 2**0.5], [0.5, 0, 2**0.5 - 1e-15]])
In [7]: my_array[np.lexsort(my_array.T)]
Out[7]:
array([[ 0.5 , 0. , 1.41421356],
[-0.5 , 0. , 1.41421356]])
我们可以看到,在这种情况下,排序对扰动非常敏感。因此,我正在寻找一个模糊变体,np.lexsort
如果一个轴上的两个值在epsilon
. (或任何允许我订购的替代机制。)
由于我的应用程序有数百万个这样的集合,所有这些集合都需要排序,因此性能是一个问题(这就是为什么我没有盲目地尝试推出自己的宽容 np.lexsort 而不先看看是否有更好的方法它)。