[python] numpy max vs amax vs max

즉 제외 NumPy와는 — 그들은 같은 것을 사용할 수 있습니다처럼 보일 세 가지 기능을 가지고 numpy.maximum있습니다 하면서, 요소 현명한 사용 numpy.maxnumpy.amax특정 축, 또는 모든 요소에 사용할 수 있습니다. 왜 그 이상이 numpy.max있습니까? 성능에 미묘한 부분이 있습니까?

(유사 대한 minaminminimum)



답변

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을 가져 와서 요소 별 최대 값을 계산하는 것입니다. 여기서 ‘compatible’은 한 어레이가 다른 어레이로 브로드 캐스트 될 수 있음을 의미합니다. 예를 들면 다음과 같습니다.

>>> 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 계산을 수행하기 위해 호출 해야합니다.


답변

이미 np.maximum다른 이유를 언급 했습니다. 두 배열 사이의 요소 별 최대 값 인 배열을 반환합니다.

관해서 np.amaxnp.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>


답변

완전성을 위해 Numpy에는 최대 4 개의 관련 기능이 있습니다. 그들은 두 가지 범주로 나뉩니다.

  • np.amax/np.max, np.nanmax: 단일 배열 순서 통계
  • np.maximum, np.fmax: 두 배열 의 요소 별 비교

I. 를 들어 하나의 배열 순서 통계

NaN 전파자 np.amax/np.max와 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

II. 두 배열 의 요소 별 비교

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( Universal Function ) 이며, 일반 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.

답변

np.maximum 요소 별 비교뿐만 아니라 요소 별 배열과 단일 값 비교

>>>np.maximum([23, 14, 16, 20, 25], 18)
array([23, 18, 18, 20, 25])


답변