2015-03-31 6 views
11

numpy.square के बीच कोई अंतर नहीं है और ** ऑपरेटर का उपयोग एक Numpy सरणी पर कर रहा है?पायथन numpy.square बनाम **

जो मैं देख सकता हूं उससे यह एक ही परिणाम उत्पन्न करता है।

निष्पादन की दक्षता में कोई अंतर?

स्पष्टीकरण के लिए एक उदाहरण:

In [1]: import numpy as np 

In [2]: A = np.array([[2, 2],[2, 2]]) 

In [3]: np.square(A) 
Out[3]: 
array([[4, 4], 
     [4, 4]]) 

In [4]: A ** 2 
Out[4]: 
array([[4, 4], 
     [4, 4]]) 
+0

उपयोग 'timeit' स्पष्ट तस्वीर प्राप्त करने के लिए कर सकते हैं, अगर यह है कि तुम क्या करने के बाद कर रहे हैं। – Marcin

+3

वे काफी समान नहीं हैं, 'np.square() 'तत्व तत्व स्क्वायरिंग करता है, जबकि कुछ वर्ग उदा। मैट्रिक्स '__pow __() 'ऑपरेटर कुछ अलग करता है। सरणी वर्ग के लिए वे वही हैं। 'सरणी' को 'मैट्रिक्स' में बदलें और अंतर देखें। – AChampion

+0

इसके अलावा, एक्स ** 2 (जहां एक्स एक numpy सरणी है) आपको कुछ नकारात्मक तत्व दे सकता है, जबकि np.square (x) – BlackBear

उत्तर

9

आप निष्पादन समय की जाँच जो एक तेजी से होता है की जाँच करने के की यह

In [2]: import numpy as np 
In [3]: A = np.array([[2, 2],[2, 2]]) 
In [7]: %timeit np.square(A) 
1000000 loops, best of 3: 923 ns per loop 
In [8]: %timeit A ** 2 
1000000 loops, best of 3: 668 ns per loop 
+3

नोट:% टाइमिट ipython जादू है। – AChampion

+1

np.square बड़े मैट्रिक्स के साथ तेज़ हो सकता है, यह भी: 'sq = np.square % टाइमिट वर्ग (ए)' -> '680ns' –

7

सबसे उपकरणों के लिए, दोनों आप एक ही परिणाम प्राप्त होंगे। आम तौर पर मानक पायथनिक * * या एक ** 2 numpy.square() या numpy.pow() से तेज है, लेकिन numpy फ़ंक्शन अक्सर अधिक लचीला और सटीक होते हैं। यदि आप गणना करते हैं जो बहुत सटीक होने की आवश्यकता है, तो numpy से चिपके रहें और शायद अन्य डेटाटाइप (float96) का भी उपयोग करें।

सामान्य उपयोग के लिए ** ** अच्छी नौकरी और तरीके से तेजी से काम करेगा। this thread में लड़कों ने एक ही प्रश्न के लिए कुछ अच्छे उदाहरण दिए।

+1

'**' एक numpy सरणी का ** ** 'ndarray के लिए सिंटैक्टिक चीनी है .__ pow __() । – AChampion

+0

सही, मैं तर्क के प्रकार (numpy या नहीं) के बारे में बहुत अस्पष्ट था – foehnx

संबंधित मुद्दे