目标
我有一个 3D 空间中大约 500K 点的列表。我想找到具有最大第一最近邻距离的两个坐标。
方法
我正在使用 scipy 计算稀疏距离矩阵:
from scipy.spatial import cKDTree
tree = cKDTree(points, 40)
spd = tree.sparse_distance_matrix(tree, 0.01)
spo = spd.tocsr()
spo.eliminate_zeros()
我消除了显式零以解释计算每个点与其自身之间距离的对角线元素。
我现在想找到每行/列中最小距离的坐标,它应该对应于每个点的第一个最近邻居,例如:
spo.argmin(axis=0)
通过找到该数组中元素的最大距离,我应该能够找到具有最大第一最近邻距离的两个元素。
问题
问题是min和的argmin函数scipy.sparse.csr_matrix也考虑了隐式零,这对于这个应用程序我不想要。我该如何解决这个问题?有了这个庞大的矩阵,性能和内存都是问题。或者对我想做的事情有完全不同的方法吗?