7

我在一个小功能上使用 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 这么慢的任何想法?提前致谢。

4

2 回答 2

9

啊,这个似曾相识。如果您使用的是 pylab 接口,它可能会将 numpysum导入范围,覆盖内置。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

于 2012-07-03T04:23:01.000 回答
3

我们在 IronPython 中发现了这个问题。默认情况下,命令行会为每次调用导入大量项目。交互式 shell 将它们加载一次并准备就绪!

因此,请检查默认情况下完成了哪些导入并将它们从时间中删除。

于 2012-07-03T04:14:15.000 回答