Python 我怎样才能找到第k个最近的邻居?

Python 我怎样才能找到第k个最近的邻居?,python,scikit-learn,dbscan,Python,Scikit Learn,Dbscan,我有一个数据框,有将近4000000个条目。基于3个特征,我想找出每个点与其第1000个最近邻居之间的距离。到目前为止,我已经这样尝试过: from sklearn.neighbors import NearestNeighbors neigh = NearestNeighbors(n_neighbors=1000) nbrs = neigh.fit(df[features]) distances, indices = nbrs.kneighbors(df[features]) 战后,

我有一个数据框,有将近4000000个条目。基于3个特征,我想找出每个点与其第1000个最近邻居之间的距离。到目前为止,我已经这样尝试过:

from sklearn.neighbors import NearestNeighbors    
neigh = NearestNeighbors(n_neighbors=1000)
nbrs = neigh.fit(df[features])
distances, indices = nbrs.kneighbors(df[features])
战后,我会对
距离
数组进行切片,得到一个数组,每个条目到第1000个最近邻居的距离,因为这是我唯一关心的。但是我没有做到这一点,因为我没有足够的内存来存储形状为(40000001000)的数组。
有没有一种方法可以让我省下与第1000位邻居的距离,而放弃所有其他999位邻居

背景是,我正试图找到一个适合epsilon运行DBSCAN算法的方法,但显然我的数据点彼此太接近了。我已经为5个和100个邻居尝试了上面的代码。然而,除了一些异常值外,距离几乎为0。

您可能希望尝试:

from sklearn.neighbors import KDTree
x = np.random.randn(4000000,3)
kdt = KDTree(x)

closest_1000th =[]
for i in range(x.shape[0]):
    dist, _ = kdt.query(x[i,:].reshape(1,-1),1000)
    closest_1000th.append(dist[0, -1])
在我的4Gb内存笔记本电脑上,完成这项任务大约需要1小时


hattip@bogovicj.

尝试使用KDTree:很高兴你写下了细节+1@bogovicj你可以写你的,我会投票的!(我的真实尝试都没有成功,这就是为什么)嗨,我认为切片有语法错误,但我明白了。非常感谢。