index - maximum python
numpy max vs amax vs maximum (3)
numpy tiene tres funciones diferentes que parecen que se pueden usar para las mismas cosas, excepto que
numpy.maximum
solo se
puede usar por elementos, mientras que
numpy.max
y
numpy.amax
se pueden usar en ejes particulares o en todos los elementos .
¿Por qué hay algo más que
numpy.max
?
¿Hay alguna sutileza en el rendimiento?
(Del mismo modo para
min
vs.
amin
vs.
minimum
)
Para completar, en Numpy hay cuatro funciones relacionadas máximas . Se dividen en dos categorías diferentes:
-
np.amax/np.max
,np.nanmax
: para estadísticas de orden de matriz única -
y
np.maximum
,np.fmax
: para la comparación por elementos de dos matrices
I. Para estadísticas de orden de matriz única
El propagador de
np.amax/np.max
y su contraparte ignorante de NaN
np.nanmax
.
-
np.max
es solo un alias denp.amax
, por lo que se consideran como una función.>>> np.max.__name__ ''amax'' >>> np.max is np.amax True
-
np.max
propaga NaNs mientras quenp.nanmax
ignora los NaNs.>>> np.max([np.nan, 3.14, -1]) nan >>> np.nanmax([np.nan, 3.14, -1]) 3.14
II Para la comparación por elementos de dos matrices
Propagador de NaNs
np.maximum
y su contraparte ignorante de
np.fmax
.
-
Ambas funciones requieren dos matrices como los dos primeros argumentos posicionales para comparar.
# x1 and x2 must be the same shape or can be broadcast np.maximum(x1, x2, /, ...); np.fmax(x1, x2, /, ...)
-
np.maximum
propaga NaNs mientras quenp.fmax
ignora los 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])
-
Las funciones de elementos sabios son Here , lo que significa que tienen algunas propiedades especiales que la función normal de Numpy no tiene.
>>> type(np.maximum) <class ''numpy.ufunc''> >>> type(np.fmax) <class ''numpy.ufunc''> >>> #---------------# >>> type(np.max) <class ''function''> >>> type(np.nanmax) <class ''function''>
Y finalmente, las mismas reglas se aplican a las cuatro funciones mínimas relacionadas:
-
np.amin/np.min
,np.nanmin
; -
y
np.minimum
,np.fmin
.
Ya ha indicado por qué
np.maximum
es diferente: devuelve una matriz que es el máximo en cuanto a elementos entre dos matrices.
En cuanto a
np.amax
y
np.max
: ambos llaman a la misma función:
np.max
es solo un alias para
np.amax
, y calculan el máximo de todos los elementos en una matriz, o a lo largo de un eje de una matriz.
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>
np.max
es solo un alias para
np.amax
.
Esta función solo funciona en una matriz de entrada
única
y encuentra el valor del elemento máximo en toda la matriz (devolviendo un escalar).
Alternativamente, toma un argumento de
axis
y encontrará el valor máximo a lo largo de un eje de la matriz de entrada (devolviendo una nueva matriz).
>>> 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])
El comportamiento predeterminado de
np.maximum
es tomar
dos
matrices y calcular su máximo de elementos.
Aquí, ''compatible'' significa que una matriz se puede transmitir a la otra.
Por ejemplo:
>>> b = np.array([3, 6, 1])
>>> c = np.array([4, 2, 9])
>>> np.maximum(b, c)
array([4, 6, 9])
Pero
np.maximum
también es una
función universal, lo
que significa que tiene otras características y métodos que
np.maximum
útiles cuando se trabaja con matrices multidimensionales.
Por ejemplo, puede calcular el máximo acumulado sobre una matriz (o un eje particular de la matriz):
>>> d = np.array([2, 0, 3, -4, -2, 7, 9])
>>> np.maximum.accumulate(d)
array([2, 2, 3, 3, 3, 7, 9])
Esto no es posible con
np.max
.
Puede hacer que
np.maximum
imite
np.max
en cierta medida cuando use
np.maximum.reduce
:
>>> np.maximum.reduce(d)
9
>>> np.max(d)
9
Las pruebas básicas sugieren que los dos enfoques son comparables en rendimiento;
y deberían serlo, ya que
np.max()
realmente llama a
np.maximum.reduce
para hacer el cálculo.