मान लीजिए कि मैं NumPy सरणी की एक सूची का एक तत्व के लिहाज से योग करने के लिए चाहते हैं:जल्दी NumPy सरणी संक्षेप तत्व के लिहाज से
tosum = [rand(100,100) for n in range(10)]
मैं यह करने के लिए सबसे अच्छा तरीका के लिए देख रहा हूँ। ऐसा लगता है numpy.sum की तरह भयंकर है:
timeit.timeit('sum(array(tosum), axis=0)',
setup='from numpy import sum; from __main__ import tosum, array',
number=10000)
75.02289700508118
timeit.timeit('sum(tosum, axis=0)',
setup='from numpy import sum; from __main__ import tosum',
number=10000)
78.99106407165527
कम बहुत तेजी से (परिमाण के लगभग दो आदेशों की धुन पर) है:
timeit.timeit('reduce(add,tosum)',
setup='from numpy import add; from __main__ import tosum',
number=10000)
1.131795883178711
यह भी कम करने की तरह दिखता है पर एक सार्थक नेतृत्व है गैर numpy योग (ध्यान दें कि इन 1E6 के लिए कर रहे हैं 1E4 चलाता है के बजाय ऊपर समय के लिए है कि):
timeit.timeit('reduce(add,tosum)',
setup='from numpy import add; from __main__ import tosum',
number=1000000)
109.98814797401428
timeit.timeit('sum(tosum)',
setup='from __main__ import tosum',
number=1000000)
125.52461504936218
वहाँ अन्य तरीकों मैं कोशिश करनी चाहिए रहे हैं? क्या कोई रैंकिंग की व्याख्या कर सकता है?
संपादित
numpy.sum निश्चित रूप से तेजी से करता है, तो सूची पहले एक numpy सरणी में बदल गया है:
tosum2 = array(tosum)
timeit.timeit('sum(tosum2, axis=0)',
setup='from numpy import sum; from __main__ import tosum2',
number=10000)
1.1545608043670654
हालांकि, मैं केवल एक बार एक योग करने में रुचि हूँ , इसलिए सरणी को एक numpy सरणी में बदलना अभी भी एक असली प्रदर्शन जुर्माना होगा।
मेरा अनुमान है कि 'np.sum' पहले बनाता है और सरणी और फिर इसे योग जो की व्याख्या करता है यह खराब प्रदर्शन ... मेरा अनुमान है कि है यह सबसे तेजी से हो सकता है अगर आप एक' एनपी पारित किया था। शुरू करने के लिए ndarray'। – mgilson
और मैं उम्मीद करता हूं कि 'sum' को लगभग 1/11 तक कम करने की उम्मीद है क्योंकि यह' 0 + टॉसम [0] 'को छोड़कर 'sum' में निहित है। – mgilson
यह समझ में आता है। मैं अलग-अलग सरणी के गुच्छा से शुरू करता हूं, इसलिए उन्हें पहले एक सुस्त सरणी में बदलना एक ही प्रदर्शन दंड होता है क्योंकि यह मेरे लिए योग करता है (क्योंकि मैं केवल एक बार योग कर रहा हूं)। – lnmaurer