নম্পি সর্বাধিক বনাম অ্যামাক্স বনাম সর্বাধিক


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.maxকরতে পারেন np.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?
ডিলিথিয়ামম্যাট্রিক্স

1
এটা ঠিক, amaxএটিতে উপাদান-ভিত্তিক তুলনার জন্য অনুকূল নয় - যে কোনও ইনপুটকে নিম্পি অ্যারে হওয়া দরকার, যাতে অপারেশনটি চলার আগে সেই তালিকাটি রূপান্তরিত হয়ে যায় (ধরে নিবেন যে দুটি আকার একই ছিল)। amaxবিশেষত দস্তাবেজগুলি maximumএখানে দ্রুততর বলে ।
অ্যালেক্স রিলি

দ্বিতীয় প্রশ্নে: আমি অনুমান করি যে একটি ইউফুঙ্ক তৈরি করা amax যেতে পারে, যদিও ইউফুঙ্কসটির মূল উদ্দেশ্য অ্যারেগুলির মধ্যে ক্রিয়াকলাপ সম্প্রচারের অনুমতি দেওয়া। maxএকটি unary ufunc করা খুব কম প্রয়োজন বলে মনে হচ্ছে । আমি মনে করি amaxইউফুঙ্কগুলি আসলেই একটি জিনিস ছিল (এটি সংখ্যাসূচক, নুমপির পিতা-মাতার কাছ থেকে এসেছে) তাই উত্তরোত্তর জন্যও রাখা হয়।
অ্যালেক্স রিলি

এখানে 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
@ টমহেল: আমি মনে করি যে ডকুমেন্টেশনগুলি 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জন্য উপাদান-অনুযায়ী তুলনা দুইটি অ্যারের

আই জন্য একক অ্যারে অর্ডার পরিসংখ্যান

NaNs প্রচারকারী np.amax/np.maxএবং এর NaN অজ্ঞান অংশ np.nanmax

  • np.maxএটির একটি মাত্র নাম np.amax, তাই এগুলি একটি ফাংশন হিসাবে বিবেচিত হয়।

    >>> np.max.__name__
    'amax'
    >>> np.max is np.amax
    True
  • np.maxNaNs np.nanmaxউপেক্ষা করার সময় NaNs প্রচার করে।

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

২। দুটি অ্যারে উপাদান-ভিত্তিক তুলনার জন্য

NaNs প্রচারকারী np.maximumএবং এর NaNs অজ্ঞান অংশ np.fmax

  • উভয় ফাংশনের জন্য প্রথম দুটি অবস্থানগত আরোগুলি তুলনা করার জন্য দুটি অ্যারে প্রয়োজন require

    # x1 and x2 must be the same shape or can be broadcast
    np.maximum(x1, x2, /, ...);
    np.fmax(x1, x2, /, ...)
  • np.maximumNaNs np.fmaxউপেক্ষা করার সময় NaNs প্রচার করে।

    >>> 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( ইউনিভার্সাল ফাংশন ) যার অর্থ তাদের কিছু বিশেষ বৈশিষ্ট্য রয়েছে যা সাধারণ নম্পি ফাংশনটিতে নেই।

    >>> 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])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.