numpy अधिकतम बनाम amax बनाम अधिकतम


132

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

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

जवाबों:


164

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एक सार्वभौमिक कार्य भी है जिसका अर्थ है कि इसमें अन्य विशेषताएं और विधियां हैं जो बहुआयामी सरणियों के साथ काम करते समय उपयोगी होती हैं। उदाहरण के लिए आप किसी सरणी पर (या सरणी का एक विशेष अक्ष) अधिकतम संचयी की गणना कर सकते हैं:

>>> 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.maxnp.maximum.reduce

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

बुनियादी परीक्षण से पता चलता है कि दो दृष्टिकोण प्रदर्शन में तुलनीय हैं; और वे np.max()वास्तवnp.maximum.reduce में गणना करने के लिए कहते हैं


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

1
यह सही है, amaxइसमें तत्व-वार तुलना के लिए ऑप्टिमाइज़ नहीं किया गया है - किसी भी इनपुट को एक Numpy सरणी होने की आवश्यकता होगी, ताकि ऑपरेशन चलने से पहले उस सूची को बदल दिया जाएगा (यह मानते हुए कि दोनों आकार समान थे)। डॉक्स amaxविशेष रूप से कहते हैं कि maximumयहां तेजी है।
एलेक्स रिले

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

यहाँ maximum.reduce प्रदर्शन के लिए पसंद किया जाता है: The Python function max() will find the maximum over a one-dimensional array, but it will do so using a slower sequence interface. The reduce method of the maximum ufunc is much faster. Also, the max() method will not give answers you might expect for arrays with greater than one dimension.[...]
टॉम हेल

1
@TomHale: मुझे लगता है कि दस्तावेज़ीकरण पायथन की बात कर रहा है max(), बजाय फ़ंक्शन में निर्मित numpy.max(), लेकिन यह निश्चित रूप से इंगित करने के लायक है कि पायथन max()धीमा है।
एलेक्स रिले

21

आपने पहले ही कहा है कि 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>

2
मुझे अब बेवकूफ लग रहा है, मैं हर समय from numpy import max as np_maxजेनेरिक के साथ संघर्ष से बचने के लिए कर रहा था maxजबकि मैं सिर्फ amax छुपा सकता था
बास जानसन

8

पूर्णता के लिए, Numpy में चार अधिकतम संबंधित कार्य हैं। वे दो अलग-अलग श्रेणियों में आते हैं:

  • np.amax/np.max, np.nanmax: के लिए एकल सरणी आदेश आँकड़े
  • और np.maximum, दो सरणियों केnp.fmax तत्व-वार तुलना के लिए

मैं के लिए एक सरणी आदेश आँकड़े

np.amax/np.maxNaN प्रचारक और इसके NaN अज्ञानी समकक्ष np.nanmax

  • np.maxका सिर्फ एक उपनाम है np.amax, इसलिए उन्हें एक कार्य माना जाता है।

    >>> np.max.__name__
    'amax'
    >>> np.max is np.amax
    True
  • np.maxNaN की np.nanmaxउपेक्षा करते हुए NaN का प्रचार करता है।

    >>> np.max([np.nan, 3.14, -1])
    nan
    >>> np.nanmax([np.nan, 3.14, -1])
    3.14

द्वितीय। दो सरणियों के तत्व-वार तुलना के लिए

NaN प्रचारक np.maximumऔर उसके NaN अज्ञानी समकक्ष np.fmax

  • दोनों कार्यों के लिए दो सरणियों की आवश्यकता होती है क्योंकि पहले दो स्थितियां तुलना करने के लिए आ जाती हैं।

    # x1 and x2 must be the same shape or can be broadcast
    np.maximum(x1, x2, /, ...);
    np.fmax(x1, x2, /, ...)
  • np.maximumNaN की np.fmaxउपेक्षा करते हुए NaN का प्रचार करता है।

    >>> np.maximum([np.nan, 3.14, 0], [np.NINF, np.nan, 2.72])
    array([ nan,  nan, 2.72])
    >>> np.fmax([np.nan, 3.14, 0], [np.NINF, np.nan, 2.72])
    array([-inf, 3.14, 2.72])
  • तत्व-वार फ़ंक्शन np.ufunc( यूनिवर्सल फंक्शन ) हैं , जिसका अर्थ है कि उनके पास कुछ विशेष गुण हैं जो सामान्य Numpy फ़ंक्शन के पास नहीं हैं।

    >>> type(np.maximum)
    <class 'numpy.ufunc'>
    >>> type(np.fmax)
    <class 'numpy.ufunc'>
    >>> #---------------#
    >>> type(np.max)
    <class 'function'>
    >>> type(np.nanmax)
    <class 'function'>

और अंत में, वही नियम चार न्यूनतम संबंधित कार्यों पर लागू होते हैं :

  • np.amin/np.min, np.nanmin;
  • और np.minimum, np.fmin

0

np.maximum न केवल एलिमेंटवाइज़ की तुलना करता है, बल्कि सिंगल वैल्यू के साथ एरे एलिमेंटवाइज़ की भी तुलना करता है

>>>np.maximum([23, 14, 16, 20, 25], 18)
array([23, 18, 18, 20, 25])
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.