我在一个小函数上使用Enthought EPD-Free 7.3-1,当我剪切/粘贴到交互式会话(PyLab)并运行它时,它只需不到一秒钟。当我从命令行“python probtest.py
”运行相同的代码时,它需要超过16秒。
我已经确认两者都在使用相同的python环境。也许相关(可能不是)但是在.py
文件的目录中,没有.pyc
文件...我最近做过的python脚本都没有关联的.pyc文件。我检查了文件夹的读/写权限,使用了“修复权限”(Mac OSX-Lion),并卸载/重新安装了EPD_Free python,但没有运气。
我不知道可能是什么原因。我正在使用的代码(对x个骰子进行简单测试,至少找到y六个):
import numpy as np
import sys
def runTest(numDice, numSixes, numThrows = 10000):
nSuccess = 0
for i in range(numThrows):
dList = np.random.randint(1,7,numDice)
if sum(dList==6) >= numSixes:
nSuccess += 1
return float(nSuccess)/numThrows
print runTest(900,150,5000)
print sys.version
关于命令行python为何如此慢的任何想法?提前谢谢。
答案 0 :(得分:9)
sum
导入范围,覆盖内置。 numpy的总和会快得多(以下两个代码之间的唯一区别就是我已经将from numpy import sum
添加到第二个代码中了:
localhost-2:coding $ time python sumtime.py
0.5106
2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]
real 0m20.313s
user 0m19.955s
sys 0m0.247s
localhost-2:coding $ time python sumtime_with_np_sum.py
0.5118
2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]
real 0m0.572s
user 0m0.345s
sys 0m0.220s
您可以通过查看是否sum is np.sum
来验证这一点。
答案 1 :(得分:3)
我们在IronPython中发现了这个问题。对于每次调用,命令行默认导入大量项目。交互式shell将它们加载一次并准备好了!
因此,请检查默认情况下执行的导入操作,并将其从时间中删除。