2015-11-06 11 views
31

numpy बनाम तीन अलग-अलग कार्य करता है जो की तरह वे एक ही बातों के लिए इस्तेमाल किया जा सकता लगते हैं --- है, सिवाय इसके कि numpy.maximum कर सकते हैं केवल, तत्व के लिहाज से इस्तेमाल किया जा जबकि numpy.max और numpy.amax विशेष पर इस्तेमाल किया जा सकता अक्ष, या सभी तत्वों। numpy.max से अधिक क्यों है? प्रदर्शन में इस के लिए कुछ subtlety है?numpy अधिकतम Amax बनाम अधिकतम

(इसी min बनाम amin बनाम minimum के लिए)

उत्तर

37

np.max सिर्फ np.amax के लिए एक उपनाम है। यह फ़ंक्शन केवल एकल इनपुट सरणी पर काम करता है और उस संपूर्ण सरणी में अधिकतम तत्व का मान पाता है (एक स्केलर लौटा रहा है)। वैकल्पिक रूप से, यह axis तर्क लेता है और इनपुट सरणी (एक नई सरणी लौटने) के अक्ष के साथ अधिकतम मान प्राप्त करेगा।

>>> a = np.array([[0, 1, 6], 
        [2, 4, 1]]) 
>>> np.max(a) 
6 
>>> np.max(a, axis=0) # max of each column 
array([2, 4, 6]) 

np.maximum के डिफ़ॉल्ट व्यवहार को दो सरणियों लेने के लिए और उनके तत्व के लिहाज से अधिकतम गणना करने के लिए है। यहां, 'संगत' का अर्थ है कि एक सरणी को दूसरे पर प्रसारित किया जा सकता है। उदाहरण के लिए:

>>> b = np.array([3, 6, 1]) 
>>> c = np.array([4, 2, 9]) 
>>> np.maximum(b, c) 
array([4, 6, 9]) 

लेकिन np.maximum भी एक universal function जिसका मतलब है कि यह अन्य सुविधाओं और तरीकों जो उपयोगी में आते हैं जब बहुआयामी सरणियों के साथ काम किया है। उदाहरण के लिए आप एक सरणी के साथ संचयी अधिकतम (या सरणी के एक विशेष अक्ष) की गणना कर सकते हैं:

>>> d = np.array([2, 0, 3, -4, -2, 7, 9]) 
>>> np.maximum.accumulate(d) 
array([2, 2, 3, 3, 3, 7, 9]) 

यह np.max साथ संभव नहीं है।

आप np.maximum कुछ हद तक np.max की नकल कर सकते हैं जब np.maximum.reduce का उपयोग कर:

>>> np.maximum.reduce(d) 
9 
>>> np.max(d) 
9 

बेसिक परीक्षण से पता चलता है दो दृष्टिकोण प्रदर्शन में तुलना कर रहे हैं।

+1

धन्यवाद। जाहिर है, एक 'रूट' उद्देश्य के लिए 'अधिकतम' के रूप में 'अधिकतम' के रूप में 'amax' का उपयोग कर सकता है, यानी' numpy.amax ([a1, a2], axis = 0) '--- लेकिन क्या यह इस व्यवहार के लिए अनुकूल नहीं है 'numpy.maximum'? इसी तरह, 'numpy.amax' (उदा। 'अक्ष' पैरामीटर) की अतिरिक्त niceties इसे 'ufunc' होने से रोकें? – DilithiumMatrix

+0

यह सही है, 'अमेक्स' को तत्व-वार तुलना के लिए अनुकूलित नहीं किया गया है - किसी भी इनपुट को एक अम्पी सरणी होने की आवश्यकता होगी, ताकि ऑपरेशन चलाने से पहले सूची परिवर्तित हो जाएगी (माना जाता है कि दो आकार समान थे)। 'अमेक्स' के लिए दस्तावेज़ विशेष रूप से कहते हैं कि 'अधिकतम' यहां तेज है। –

+0

दूसरे प्रश्न पर: मुझे लगता है कि 'अमैक्स' * को ufunc में बनाया जा सकता है, हालांकि यूफुनक्स का मुख्य उद्देश्य संचालन को सरणी के बीच प्रसारित करने की अनुमति देना है। 'अधिकतम' को एक यूनरी ufunc बनाने की आवश्यकता नहीं है। मुझे लगता है कि यूफंक्स से पहले 'अमेक्स' अस्तित्व में था वास्तव में एक चीज थी (यह संख्यात्मक, न्यूमपी के माता-पिता से आई थी) इसलिए भी वंशावली के लिए रखा जाता है। –

6

आप पहले से ही कहा गया है किया है कि क्यों np.maximum अलग है - यह एक सरणी है कि दो सरणियों के बीच तत्व के लिहाज से सबसे अधिक है देता है।

np.amax और np.max का सवाल है: वे दोनों एक ही समारोह कहते हैं - np.max सिर्फ np.amax के लिए एक उपनाम है, और वे एक सरणी में सभी तत्वों की अधिकतम की गणना, या किसी सरणी के एक धुरी के साथ।

In [1]: import numpy as np 

In [2]: np.amax 
Out[2]: <function numpy.core.fromnumeric.amax> 

In [3]: np.max 
Out[3]: <function numpy.core.fromnumeric.amax> 
संबंधित मुद्दे