Numpy max vs amax vs maximo

numpy tiene tres funciones diferentes que parecen que pueden usarse para las mismas cosas, excepto que numpy.maximum solo se puede usar en forma de elementos, mientras que numpy.max y numpy.amax se pueden usar en ejes particulares, o en todos los elementos . ¿Por qué hay más que solo numpy.max ? ¿Hay alguna sutileza a esto en el rendimiento?

(Del mismo modo para min vs amin vs minimum )

np.max es solo un alias para np.amax . Esta función solo funciona en una sola matriz de entrada 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 acumulativo 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 al usar 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 ser, ya que np.max() realidad llama a np.maximum.reduce para hacer el cálculo.

Ya ha indicado por qué np.maximum es diferente: devuelve una matriz que es el máximo de 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 en un eje de una matriz.

 In [1]: import numpy as np In [2]: np.amax Out[2]:  In [3]: np.max Out[3]:  

Para completar, en Numpy hay cuatro funciones máximas relacionadas. Se clasifican 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 de elementos de dos matrices

I. Para estadísticas de orden de matriz única

El propagador de np.amax/np.max y su homólogo ignorante de NaN np.nanmax .

  • np.max es solo un alias de np.amax , por lo que se consideran como una función.

     >>> np.max.__name__ 'amax' >>> np.max is np.amax True 
  • np.max propaga los NaN mientras que np.nanmax ignora los NaN.

     >>> np.max([np.nan, 3.14, -1]) nan >>> np.nanmax([np.nan, 3.14, -1]) 3.14 

II. Para la comparación de elementos de dos matrices

El propagador de np.maximum y sus homólogos ignorantes de np.fmax .

  • Ambas funciones requieren dos arreglos 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 los NaN mientras que np.fmax ignora los 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]) 
  • Las funciones de los elementos son np.ufunc ( Función universal ) , lo que significa que tienen algunas propiedades especiales que la función normal de Numpy no tiene.

     >>> type(np.maximum)  >>> type(np.fmax)  >>> #---------------# >>> type(np.max)  >>> type(np.nanmax)  

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 .