2012-06-08 11 views
25

पायथन में, कौन सा तेज़ है?numpy.max या अधिकतम? कौन सा तेज़ है?

numpy.max(), numpy.min() 

या

max(), min() 

मेरी सूची/सरणी लंबाई 600 कौन सा मैं कुछ रन समय बचाने के लिए उपयोग करना चाहिए करने के लिए 2 से भिन्न होता है?

+3

आप निश्चित रूप से परीक्षण करना चाहिए और अपने विशिष्ट परिदृश्य के लिए यह पता लगाना है, लेकिन मेरी पहली वृत्ति है कि यह आपके iterables हैं या नहीं इस पर निर्भर करेगा कि " वेनिला "पायथन iterables या numpy iterables। – jedwards

+6

यदि डेटा ** 'list' ** में है, तो मैं वेनिला' अधिकतम' का उपयोग करूंगा। अगर वे एक numpy ** 'array' ** में हैं, तो मैं' numpy.max' का उपयोग करूंगा। एक सूची को एक numpy सरणी में कनवर्ट करना एक बहुत ही महंगी ऑपरेशन है –

उत्तर

36
मेरे समय से अच्छी तरह से

यह इस प्रकार यदि आप पहले से ही numpy सरणी है a आप a.max का उपयोग करना चाहिए (स्रोत बताता है यह np.maxa.max यदि उपलब्ध हो तो के रूप में ही है)। लेकिन अगर आपके पास अंतर्निहित सूची है तो अधिकांश समय को np.ndarray => में कनवर्ट करता है, यही कारण है कि max आपके समय में बेहतर है।

सार में: अगर np.ndarray तो a.max, अगर list और सभी np.ndarray तो मानक max की मशीनरी के लिए कोई जरूरत नहीं।

9

यदि आप अपने लिए परीक्षण करने के लिए पाइथन timeit module जैसे कुछ उपयोग करते हैं तो यह शायद सबसे अच्छा है। इस तरह आप विभिन्न परीक्षण डेटा और वातावरण के साथ तीसरे पक्षों पर भरोसा करने के बजाय अपने पर्यावरण में अपने डेटा का परीक्षण कर सकते हैं, जो आपके लिए आवश्यक प्रतिनिधि नहीं हैं।

+2

मैंने 600 फ़्लोटिंग पॉइंट नंबरों की एक यादृच्छिक सूची पर कोशिश की। || np.max() + np.min() -> 1.0 9 3 एमसीईसी || अधिकतम() + मिनट() -> 0.0 9 2 एमसीसी – Froyo

2

numpy.min और numpy.max में बिल्टिन के लिए थोड़ा अलग अर्थशास्त्र (और कॉल हस्ताक्षर) हैं, इसलिए पसंद को गति से नहीं करना चाहिए। अगर आपको बहुआयामी डेटा को संभालने में सक्षम होना चाहिए तो numpy संस्करणों का उपयोग करें। यदि आप केवल पाइथन सूचियों या अन्य चीजों का उपयोग कर रहे हैं जो आयाम के बारे में नहीं जानते हैं, तो बिल्टिन का उपयोग करें।

9

मुझे इसमें भी रूचि थी और perfplot (मेरा एक छोटा सा प्रोजेक्ट) के साथ तीन प्रकारों का परीक्षण किया गया। परिणाम: आप a.max() के साथ गलत नहीं जा रहे हैं।

enter image description here

कोड साजिश पुन: पेश करने:

import numpy 
import perfplot 

perfplot.show(
    setup=lambda n: numpy.random.rand(n), 
    kernels=[ 
     max, 
     numpy.max, 
     lambda a: a.max() 
     ], 
    labels=['max(a)', 'numpy.max(a)', 'a.max()'], 
    n_range=[2**k for k in range(20)], 
    logx=True, 
    logy=True, 
    xlabel='len(a)' 
    ) 
संबंधित मुद्दे