Answers:
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
执行的计算。
amax
没有针对元素进行比较而优化-任何输入都必须是Numpy数组,以便在运行操作之前转换列表(假设两个形状相同)。amax
专门针对该文档的文档说,maximum
这里的速度更快。
amax
可以将其做成ufunc。似乎几乎不需要创建max
一元ufunc。我认为amax
在ufuncs真正存在之前就存在(它来自NumPy的父母数值),因此也保留下来供后代使用。
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.
[...]
max()
函数,而不是numpy.max()
,但是绝对值得指出的是Python max()
速度较慢。
您已经说明了为什么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>
from numpy import max as np_max
只是为了避免与通用仿制药发生冲突,max
而我本可以使用amax
生皮。
为了完整起见,在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
。
amax
用于与(-)相同的(根)目的maximum
,numpy.amax([a1, a2], axis=0)
但是对于这种行为,它的优化程度不如numpy.maximum
吗?类似地,numpy.amax
(例如axis
参数)添加的细微之处是否会使它不再是ufunc
?