निम्न दो काम करता है, पर विचार के लिए numpy की तुलना में तेज छोरों के लिए कर रहे हैं जो अनिवार्य रूप से गुणा एक बड़ा अनुक्रम में हर नंबर के साथ एक छोटी सी अनुक्रम एक 2D सरणी का निर्माण करने, और उसके बाद में हर संख्या में सभी मान दोगुना हो जाता है सरणी noloop()
2 डी NumPy सरणी के प्रत्यक्ष गुणन का उपयोग करता है और परिणाम देता है, जबकि loop()
पाश के लिए एक का उपयोग करता है arr1
से अधिक पुनरावृति और धीरे-धीरे एक आउटपुट सरणी का निर्माण करने के।क्यों 2 डी सरणी गुणा
import numpy as np
arr1 = np.random.rand(100, 1)
arr2 = np.random.rand(1, 100000)
def noloop():
return (arr1*arr2)*2
def loop():
out = np.empty((arr1.size, arr2.size))
for i in range(arr1.size):
tmp = (arr1[i]*arr2)*2
out[i] = tmp.reshape(tmp.size)
return out
मैं noloop
की उम्मीद बहुत तेजी से भी पुनरावृत्तियों की एक छोटी संख्या के लिए हो सकता है, लेकिन के लिए सरणी से ऊपर आकार, loop
वास्तव में तेजी से होता है: दिलचस्प
>>> %timeit noloop()
10 loops, best of 3: 64.7 ms per loop
>>> %timeit loop()
10 loops, best of 3: 41.6 ms per loop
और, यदि मैं दोनों में *2
को दूर वें के लिए एक अच्छा विवरण
>>> %timeit noloop()
10 loops, best of 3: 29.4 ms per loop
>>> %timeit loop()
10 loops, best of 3: 34.4 ms per loop
है वहाँ: काम करता है, noloop
तेजी से होता है, लेकिन केवल थोड़ा ese परिणाम, और क्या एक ही कार्य करने के लिए एक उल्लेखनीय तेज़ तरीका है?
मैं 'noloop()'() 'पाश की तुलना में तेजी से किया जा रहा (द्वारा ~ 15%)' परवाह किए बिना ... –
मैं भी पर रिवर्स मिल दोनों पायथन 2 और पायथन 3। –
मैं ', तेजी से होने के रूप में ओ पी पता चलता है (मेरी मशीन में 28% से) loop'। पायथन 3.4.1 | एनाकोंडा 2.1.0, IPython 2.2.0 – Roberto