Cod*_*ung 5 python kdtree nearest-neighbor scipy-spatial
我在许多参考资料中都被告知 KDTree 是一种为大数据寻找最近邻的快速方法。我当前的问题是为给定的数据 A 找到 X 中最近的点。详细说明,目前 X 有 1,000,000 个数值数据,A 由 10,000 个组成。我想为 A 中的每个点找到 X 中最近的点。因此,结果应该是 10,000 个索引,指示 X 中的数据点。
当我使用带有 for 循环的 cdist(来自 scipy.spatial)来查找 A 中每个数据的最近点时,大约需要半小时(1972 秒),而使用 n_jobs 时 cKDTree.query 需要大约 50 分钟(2839 秒) = 4。
cdist 的代码如下:
t = time.time()
nn = np.array([])
jump = 1000
nloop = np.ceil(A.shape[0]/jump).astype(int)
for ii in range(nloop):
temp = cdist(X, A[ii*jump:(ii+1)*jump])
nn = np.append(nn, np.argmin(temp, axis = 0))
print('Elapsed time: ', time.time() - t) # this was 1926 seconds (a little bit faster than one by one loop)
Run Code Online (Sandbox Code Playgroud)
cKDTree 的代码如下:
t = time.time()
tree = cKDTree(X)
nn = tree.query(A, 1, n_jobs = 4)[1]
print('Elapsed time: ', time.time() - t) # this is 2839 seconds
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
210 次 |
| 最近记录: |