首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么scipy.spatial.ckdtree运行速度比scipy.spatial.kdtree慢

为什么scipy.spatial.ckdtree运行速度比scipy.spatial.kdtree慢
EN

Stack Overflow用户
提问于 2018-07-29 02:25:02
回答 1查看 785关注 0票数 2

通常,scipy.spatial.ckdtree的运行速度比scipy.spatial.kdtree快得多。

但在我的例子中,scipy.spatial.ckdtree的运行速度比scipy.spatial.kdtree慢。我的代码如下:

代码语言:javascript
复制
import numpy as np
from laspy.file import File
from scipy import spatial
from timeit import default_timer as timer
inFile = File("Toronto_Strip_01.las")
dataset = np.vstack([inFile.x, inFile.y, inFile.z]).transpose()
print(dataset.shape)
start=timer()
tree = spatial.cKDTree(dataset)
# balanced_tree = False
end=timer()
distance,index=tree.query(dataset[100,:],k=5)
print(distance,index)
print(end-start)

start=timer()
tree = spatial.KDTree(dataset)
end=timer()
dis,indices= tree.query(dataset[100,:],k=5)
print(dis,indices)
print(end-start)

dataset.shape为(2727891,3),dataset.max()为4834229.32

但是,在测试用例中,scipy.spatial.ckdtree运行速度比scipy.spatial.kdtree快得多,代码如下:

代码语言:javascript
复制
import numpy as np
from timeit import default_timer as timer
from scipy import spatial
np.random.seed(0)
A = np.random.random((2000000,3))*2000000
start1 = timer()
kdt=spatial.KDTree(A)
end1 = timer()
distance,index = kdt.query(A[100,:],k=5)
print(distance,index)
print(end1-start1)

start2 = timer()
kdt = spatial.cKDTree(A)  # cKDTree + outside construction
end2 = timer()
distance,index = kdt.query(A[100,:],k=5)
print(distance,index)
print(end2-start2)

这里是我的问题:在我的代码中,我需要处理数据集来加速cKDTree吗?

我的python版本是3.6.5,scipy版本是1.1.0,cython是0.28.4。

EN

回答 1

Stack Overflow用户

发布于 2018-08-08 01:17:02

也许会有更长的评论;但是您应该考虑cKDTree参数如何影响特定数据集的性能。

尤其是balanced_treecompact_nodes - as 指向这里。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51576736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档