Numpy有三个不同的函数,它们似乎可以用于相同的事情——除了Numpy。Maximum只能按元素使用,而numpy。Max和numpy。Amax可以用在特定的轴上,也可以用在所有元素上。为什么不只有numpy。max?这在性能上有什么微妙之处吗?
(min, amin, minimum也是一样)
Numpy有三个不同的函数,它们似乎可以用于相同的事情——除了Numpy。Maximum只能按元素使用,而numpy。Max和numpy。Amax可以用在特定的轴上,也可以用在所有元素上。为什么不只有numpy。max?这在性能上有什么微妙之处吗?
(min, amin, minimum也是一样)
当前回答
np。Maximum不仅比较elementwise,而且比较数组elementwise和单个值
>>>np.maximum([23, 14, 16, 20, 25], 18)
array([23, 18, 18, 20, 25])
其他回答
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。最大模拟np。Max到一定程度时使用np.maximum.reduce:
>>> np.maximum.reduce(d)
9
>>> np.max(d)
9
基本测试表明,这两种方法在性能上具有可比性;它们应该是,因为np.max()实际上调用了np.maximum.reduce来进行计算。
np。Maximum不仅比较elementwise,而且比较数组elementwise和单个值
>>>np.maximum([23, 14, 16, 20, 25], 18)
array([23, 18, 18, 20, 25])
你已经说过为什么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>
为了完整起见,在Numpy中有四个最大相关函数。它们分为两类:
np.amax / np。马克斯,np。Nanmax:用于单数组顺序统计 和np。最大,np。Fmax:用于两个数组的元素比较
I.用于单数组顺序统计
NaNs传播器np.amax/np。max和它的NaN无知对应的np.nanmax。
np。Max只是np的别名。Amax,所以它们被认为是一个函数。 > > > np.max.__name__ “amax” > > > np。Max是np 真正的 np。max传播nan,而np。nanmax忽略nan。 > > > np.max ([np。Nan, 3.14, -1]) 南 > > > np.nanmax ([np。Nan, 3.14, -1]) 3.14
2用于两个数组的元素比较
传播器np。max和它的NaNs无知对应的np.fmax。
Both functions require two arrays as the first two positional args to compare with. # x1 and x2 must be the same shape or can be broadcast np.maximum(x1, x2, /, ...); np.fmax(x1, x2, /, ...) np.maximum propagates NaNs while np.fmax ignores NaNs. >>> 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]) The element-wise functions are np.ufunc(Universal Function), which means they have some special properties that normal Numpy function don't have. >>> 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。分钟,np.nanmin; 和np。至少,np.fmin。