为什么Python在简单的for循环中如此慢?

8 浏览
0 Comments

为什么Python在简单的for循环中如此慢?

我们正在使用Python进行一些kNN和SVD的实现。其他人选择了Java。我们的执行时间非常不同。我使用cProfile来查看我是否犯了错误,但实际上一切都还不错。是的,我也使用了numpy。但我想问一个简单的问题。

total = 0.0
for i in range(9999): # xrange比我的测试慢,但更节省内存。
    for j in range(1, 9999):
        total += (i / j)
print total

这段代码在我的电脑上需要31.40秒。

同样的电脑上,Java版本的代码只需要1秒钟或更少。我想这个代码的主要问题是类型检查。但是对于我的项目,我需要执行很多类似的操作,而且我认为9999*9999并不是一个很大的数字。

我认为我犯了错误,因为我知道Python被许多科学项目使用。但为什么这段代码如此缓慢,我该如何处理比这更大的问题?

我应该使用像Psyco这样的JIT编译器吗?

编辑

我还要说这个循环问题只是一个例子。代码并不像这么简单,将你的改进/代码示例付诸实践可能会很困难。

另一个问题是,如果我正确使用numpy和scipy,我可以实现很多数据挖掘和机器学习算法吗?

0