2012-07-03 28 views
7

मैं एक छोटे से फ़ंक्शन पर एनथॉट ईपीडी-फ्री 7.3-1 का उपयोग कर रहा हूं, और जब मैं एक इंटरैक्टिव सत्र (पीईएलएबी) में कट/पेस्ट करता हूं और इसे चलाता हूं, तो इसमें एक सेकंड से भी कम समय लगता है। जब मैं कमांड लाइन "python probtest.py" से एक ही कोड चलाता हूं तो इसमें 16 सेकंड लगते हैं।पाइथन इंटरेक्टिव शैल 16x तेज - क्या गलत है?

मैंने पुष्टि की है कि दोनों एक ही पायथन पर्यावरण का उपयोग कर रहे हैं। शायद संबंधित (शायद नहीं) लेकिन .py फ़ाइल के साथ निर्देशिका में, .pyc फ़ाइल नहीं है ... मैंने हाल ही में किए गए पाइथन स्क्रिप्ट्स में से कोई भी .pyc फ़ाइलों को संबद्ध नहीं किया है। मैंने फ़ोल्डर के लिए पढ़ने/लिखने की अनुमतियों की जांच की, "मरम्मत अनुमतियां" (मैक ओएसएक्स-शेर) का उपयोग किया, और अनइंस्टॉल/पुनर्स्थापित ईपीडी_फ्री पायथन, लेकिन कोई भाग्य नहीं।

मुझे नुकसान हो रहा है कि कारण क्या हो सकता है। कोड मैं उपयोग कर रहा हूँ (पासों का एक्स संख्या के साधारण परीक्षण, कम से कम 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 

क्यों कमांड लाइन अजगर तो बहुत धीमी है के बारे में कोई विचार? अग्रिम में धन्यवाद।

उत्तर

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 देखने के लिए देख कर इसकी पुष्टि कर सकते हैं।

+0

धन्यवाद! वह बिल्कुल समस्या थी! बहुत बहुत धन्यवाद, आपने मेरी सैनिटी बचाई है! –

+0

कोई चिंता नहीं। पिछले हफ्ते मुझे एक बग के साथ कुश्ती करना पड़ा क्योंकि मैं आलसी था और 'numpy import * से' किया था, जिसने 'numpy.any' के साथ बिल्टिन' किसी भी 'को बदल दिया, जिससे अलग-अलग व्यवहार कोड को देखकर डीबग करना लगभग असंभव हो गया। तो यह मेरे दिमाग पर था .. – DSM

3

हमें आयरनपीथन के साथ यह समस्या मिली। कमांड लाइन प्रत्येक आमंत्रण के लिए डिफ़ॉल्ट रूप से बहुत से आइटम आयात कर रही थी। और इंटरैक्टिव खोल ने उन्हें एक बार लोड किया था और तैयार हो गया था!

तो जांचें कि डिफ़ॉल्ट रूप से कौन से आयात किए जाते हैं और उन्हें समय से हटा दिया जाता है।

+0

धन्यवाद, और यह इसका हिस्सा हो सकता है, लेकिन अतिरिक्त समय रैखिक रूप से बढ़ता प्रतीत होता है क्योंकि पुनरावृत्तियों की संख्या बढ़ जाती है ... कम से कम 5000 से 500 तक numThrows कमांड लाइन के लिए 2 सेकंड से कम समय में कटौती करता है, तो यह 16 सेकंड तक है जब numThrows 5000 तक वापस चला जाता है। –