7

小さな関数で Enthought EPD-Free 7.3-1 を使用しています。インタラクティブ セッション (PyLab) にカット アンド ペーストして実行すると、1 秒もかかりません。コマンドライン " python probtest.py" から同じコードを実行すると、16 秒以上かかります。

どちらも同じ python 環境を使用していることを確認しました。関連している可能性があります(そうでない可能性があります)が、ファイルのあるディレクトリには.pyファイルがありません.pyc...最近行ったPythonスクリプトには、.pycファイルが関連付けられていません。フォルダーの読み取り/書き込みアクセス許可を確認し、「修復アクセス許可」(Mac OSX-Lion) を使用し、EPD_Free python をアンインストール/再インストールしましたが、うまくいきませんでした。

何が原因なのか途方に暮れています。私が使用しているコード(少なくともy個の6を探して、x個のサイコロの簡単なテスト):

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 の合計ははるかに高速になります (次の 2 つのコードの唯一の違いはfrom numpy import sum、2 番目に追加したことです)。

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 で見つかりました。コマンドラインは、呼び出しごとにデフォルトで多くのアイテムをインポートしていました。そして、インタラクティブシェルはそれらを一度ロードし、準備が整いました!

したがって、デフォルトでどのインポートが行われるかを確認し、それらをタイミングから削除します。

于 2012-07-03T04:14:15.000 に答える