numpy max vs amax vs maximum

时间:2015-11-06 15:02:46

标签: python numpy math max

numpy有三种不同的功能,看起来它们可以用于相同的事情 - 除了numpy.maximum只能 才能使用元素,而numpy.max并且numpy.amax可用于特定轴或所有元素。为什么不仅仅是numpy.max?在表现上有一些微妙之处吗?

(同样适用于minaminminimum

4 个答案:

答案 0 :(得分:101)

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

基本测试表明这两种方法在性能上具有可比性;它们应该像np.max() actually calls np.maximum.reduce那样进行计算。

答案 1 :(得分:15)

您已经说明了为什么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>

答案 2 :(得分:0)

为完整起见,在Numpy中有四个 maximum 相关函数。它们分为两类:

  • np.amax/np.maxnp.nanmax:用于单个数组订单统计
  • np.maximumnp.fmax:用于两个数组的按元素比较

I。 For single array order statistics

NaNs传播者 np.amax/np.max 及其对NaN无知的对手 np.nanmax

  • np.max只是np.amax的别名,因此它们被视为一个函数。

    >>> 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。 For element-wise comparison of two arrays

NaNs传播者 np.maximum 及其对NaNs无知的对手 np.fmax

  • 两个函数都需要两个数组作为要比较的前两个位置args。

    # 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(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.minnp.nanmin
  • np.minimumnp.fmin

答案 3 :(得分:0)

np.maximum不仅按元素进行比较,而且还将数组与单个值进行元素比较

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