我一直在使用
我在Ubuntu 14.10上的计算机上运行这段代码,使用的是Python 2.7.6。直到今天早上,我大多数Python包都是用
scipy
中的spatial.cKDTree
来计算点之间的距离。对于我的典型数据集(将约1000个点与约1e6个点的数组进行距离计算),它总是运行得非常快(约1秒)。我在Ubuntu 14.10上的计算机上运行这段代码,使用的是Python 2.7.6。直到今天早上,我大多数Python包都是用
apt-get
管理的,包括scipy
和numpy
。但我想要最新版本的几个包,所以我决定卸载由apt-get
安装在/usr/lib/python2.7/
中的包,并使用pip install
重新安装所有包(如有必要,使用apt-get
处理scipy
依赖项,如liblapack-dev
)。所有的包都已经安装好了,可以顺利导入。import scipy
import cython
scipy.__version__
'0.16.0'
cython.__version__
'0.22.1'
现在,对于相同大小的数据集运行spatial.cKDTree
速度非常慢。我看到的运行时间约为500秒,而不是1秒。我很难弄清楚出了什么问题。
有什么建议可以解释为什么使用pip
安装而不是apt-get
导致scipy.spatial.cKDTree
运行如此缓慢吗?
cKDTree
的一个更常见的(滥用)用途,超出了我的想象。如果发现这对很多人来说是个问题,我们可以将默认值更改回balanced_tree=False
或执行其他技巧来检查或纠正此问题。 - Sturla MoldencKDTree
。 - jdmcbrcKDTree
脚本完成时间为5秒,而在另一台机器上则需要8分钟 - 原来scipy==0.13
默认设置比scipy==1.0.0
默认设置更好地处理了我的数据(曲线坐标网格)。感谢您的提示! - danwild