我最近开始自学python,并将这种语言用于算法的在线课程。由于某种原因,我为这门课程创建的许多代码都非常慢(相对于过去我创建的C/C++代码),我开始担心我没有正确使用Python。你知道吗
下面是一个简单的python和matlab代码,比较它们的速度。你知道吗
MATLAB软件
for i = 1:100000000
a = 1 + 1
end
Python
for i in list(range(0, 100000000)):
a=1 + 1
matlab代码大约需要0.3秒,python代码大约需要7秒。这正常吗?我的python代码处理非常复杂的问题非常慢。例如,作为一个硬件分配,我在一个有大约900000个节点的图上运行深度优先搜索,这将花费永远的时间。非常感谢。你知道吗
不幸的是,python惊人的灵活性和易用性是以缓慢为代价的。而且,对于如此大的迭代值,我建议使用itertools模块,因为它有更快的缓存。你知道吗
xrange是一个很好的解决方案,但是如果您想迭代字典之类的,最好使用itertools,因为您可以迭代任何类型的sequence对象。你知道吗
性能是not an explicit design goal of Python:
这就是为什么Python与许多高性能计算后端引擎集成的原因之一,例如numpy、OpenBLAS甚至CUDA,仅举几个例子。你知道吗
如果您想提高性能,最好的方法是让高性能库为您完成繁重的工作。在Python中优化循环(使用xrange而不是python2.7中的range)不会得到非常显著的结果。你知道吗
下面是一些比较不同方法的代码:
list(range())
xrange()
i
代码:
在OSX上的Python 2.7.13上运行的结果(图):
Numpy执行速度比CUDA解决方案快的原因是使用CUDA的开销并没有超过Python+Numpy的效率。对于更大的浮点计算,CUDA甚至比Numpy做得更好。你知道吗
请注意,Numpy解决方案的执行速度是原始解决方案的80倍以上。如果你的计时是正确的,这将比Matlab更快。。。你知道吗
关于DFS(Depth affirst Search)的最后一点说明:here是一篇关于Python中DFS的有趣文章。你知道吗
尝试使用
xrange
而不是range
。你知道吗它们之间的区别是
**xrange**
在使用值时生成值,而不是range
,后者试图在运行时生成静态列表。你知道吗相关问题 更多 >
编程相关推荐