पायथन में, कौन सा तेज़ है?numpy.max या अधिकतम? कौन सा तेज़ है?
numpy.max(), numpy.min()
या
max(), min()
मेरी सूची/सरणी लंबाई 600 कौन सा मैं कुछ रन समय बचाने के लिए उपयोग करना चाहिए करने के लिए 2 से भिन्न होता है?
पायथन में, कौन सा तेज़ है?numpy.max या अधिकतम? कौन सा तेज़ है?
numpy.max(), numpy.min()
या
max(), min()
मेरी सूची/सरणी लंबाई 600 कौन सा मैं कुछ रन समय बचाने के लिए उपयोग करना चाहिए करने के लिए 2 से भिन्न होता है?
यह इस प्रकार यदि आप पहले से ही numpy सरणी है a
आप a.max
का उपयोग करना चाहिए (स्रोत बताता है यह np.max
a.max
यदि उपलब्ध हो तो के रूप में ही है)। लेकिन अगर आपके पास अंतर्निहित सूची है तो अधिकांश समय को np.ndarray => में कनवर्ट करता है, यही कारण है कि max
आपके समय में बेहतर है।
सार में: अगर np.ndarray
तो a.max
, अगर list
और सभी np.ndarray
तो मानक max
की मशीनरी के लिए कोई जरूरत नहीं।
यदि आप अपने लिए परीक्षण करने के लिए पाइथन timeit module जैसे कुछ उपयोग करते हैं तो यह शायद सबसे अच्छा है। इस तरह आप विभिन्न परीक्षण डेटा और वातावरण के साथ तीसरे पक्षों पर भरोसा करने के बजाय अपने पर्यावरण में अपने डेटा का परीक्षण कर सकते हैं, जो आपके लिए आवश्यक प्रतिनिधि नहीं हैं।
मैंने 600 फ़्लोटिंग पॉइंट नंबरों की एक यादृच्छिक सूची पर कोशिश की। || np.max() + np.min() -> 1.0 9 3 एमसीईसी || अधिकतम() + मिनट() -> 0.0 9 2 एमसीसी – Froyo
numpy.min
और numpy.max
में बिल्टिन के लिए थोड़ा अलग अर्थशास्त्र (और कॉल हस्ताक्षर) हैं, इसलिए पसंद को गति से नहीं करना चाहिए। अगर आपको बहुआयामी डेटा को संभालने में सक्षम होना चाहिए तो numpy संस्करणों का उपयोग करें। यदि आप केवल पाइथन सूचियों या अन्य चीजों का उपयोग कर रहे हैं जो आयाम के बारे में नहीं जानते हैं, तो बिल्टिन का उपयोग करें।
मुझे इसमें भी रूचि थी और perfplot (मेरा एक छोटा सा प्रोजेक्ट) के साथ तीन प्रकारों का परीक्षण किया गया। परिणाम: आप a.max()
के साथ गलत नहीं जा रहे हैं।
कोड साजिश पुन: पेश करने:
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)'
)
आप निश्चित रूप से परीक्षण करना चाहिए और अपने विशिष्ट परिदृश्य के लिए यह पता लगाना है, लेकिन मेरी पहली वृत्ति है कि यह आपके iterables हैं या नहीं इस पर निर्भर करेगा कि " वेनिला "पायथन iterables या numpy iterables। – jedwards
यदि डेटा ** 'list' ** में है, तो मैं वेनिला' अधिकतम' का उपयोग करूंगा। अगर वे एक numpy ** 'array' ** में हैं, तो मैं' numpy.max' का उपयोग करूंगा। एक सूची को एक numpy सरणी में कनवर्ट करना एक बहुत ही महंगी ऑपरेशन है –