web-dev-qa-db-ja.com

最大ナンプ対最大アマックス対最大

numpyには3つの異なる関数がありますが、numpy.maximumはのみが要素ごとに使用できますが、numpy.maxは同じ目的で使用できるようです。 numpy.amaxは特定の軸、またはすべての要素で使用できます。なぜnumpy.maxだけではないのですか?これにパフォーマンスの微妙な点はありますか?

minaminminimumも同様)

86
DilithiumMatrix

np.maxnp.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のデフォルトの振る舞いは、2つの配列を取り、それらの要素毎の最大値を計算することです。ここで、「互換性がある」とは、一方のアレイを他方のアレイにブロードキャストできることを意味します。例えば:

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

しかしnp.maximumniversal 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

基本的なテストでは、2つの方法はパフォーマンスが似通っています。 np.max()は実際にはnp.maximum.reduce を使って計算を行います。

105
Alex Riley

np.maximumが異なる理由はすでに述べました。2つの配列のうち、要素ごとに最大の配列を返します。

np.amaxnp.maxに関しては、どちらも同じ関数を呼び出します - np.maxnp.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>
15
tmdavison

完全を期すために、Numpyには4つの最大関連関数があります。それらは2つの異なるカテゴリに分類されます。

  • np.amax/np.maxnp.nanmax単一配列に対する順序統計
  • およびnp.maximumnp.fmax2つの配列の要素ごとの比較用

I. 単一配列次数統計の場合

NaNsプロパゲータnp.amax/np.maxおよびそのNaN無知対応物np.nanmax

  • np.maxnp.amaxの単なるエイリアスであるため、それらは1つの関数と見なされます。

    >>> np.max.__name__
    'amax'
    >>> np.max is np.amax
    True
    
  • np.maxはNaNを伝播し、np.nanmaxはNaNを無視します。

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

II。 2つの配列の要素ごとの比較

NaNsプロパゲータnp.maximumとそれに対応するNaNs無知の対応物np.fmax

  • どちらの関数も、比較する最初の2つの位置引数として2つの配列を必要とします。

    # x1 and x2 must be the same shape or can be broadcast
    np.maximum(x1, x2, /, ...);
    np.fmax(x1, x2, /, ...)
    
  • np.maximumはNaNを伝播し、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'>
    

そして最後に、同じ規則が4つの最小関連関数にも適用されます。

  • np.amin/np.minnp.nanmin;
  • np.minimumnp.fmin
0
YaOzI