问题:numpy max vs amax vs maximum
numpy的具有看起来他们可被用于同样的东西三个不同的函数—不同之处在于numpy.maximum
可仅被用于逐元素,而numpy.max
且numpy.amax
可以在特定轴,或所有元件一起使用。为什么不仅仅存在numpy.max
?在性能上有一些微妙之处吗?
(类似min
vs. amin
vs. minimum
)
回答 0
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
您已经说明了为什么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
为了完整起见,在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.max
传播NaN,而np.nanmax
忽略NaN。>>> np.max([np.nan, 3.14, -1]) nan >>> np.nanmax([np.nan, 3.14, -1]) 3.14
二。用于两个数组的元素比较
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.min
,np.nanmin
;- 并且
np.minimum
,np.fmin
。
回答 3
np.maximum
不仅按元素进行比较,而且将数组与单个值进行比较
>>>np.maximum([23, 14, 16, 20, 25], 18)
array([23, 18, 18, 20, 25])