Question numpy max vs amax vs maximum


numpy a trois fonctions différentes qui semblent pouvoir être utilisées pour les mêmes choses --- sauf que numpy.maximum pouvez seulement être utilisé par élément, tout en numpy.max et numpy.amax peut être utilisé sur des axes particuliers, ou sur tous les éléments. Pourquoi y at-il plus que juste numpy.max? Y a-t-il de la subtilité dans la performance?

(De même pour min contre. amin contre. minimum)


50
2017-11-06 15:02


origine


Réponses:


np.max est juste un alias pour np.amax. Cette fonction ne fonctionne que sur un unique tableau d'entrée et trouve la valeur de l'élément maximum dans ce tableau entier (retourne un scalaire). Sinon, il faut un axis argument et trouvera la valeur maximale le long d'un axe du tableau d'entrée (renvoyant un nouveau tableau).

>>> 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])

Le comportement par défaut de np.maximum est de prendre deux les tableaux et calculent leur maximum d'éléments. Ici, "compatible" signifie qu'un tableau peut être diffusé à l'autre. Par exemple:

>>> b = np.array([3, 6, 1])
>>> c = np.array([4, 2, 9])
>>> np.maximum(b, c)
array([4, 6, 9])

Mais np.maximum est aussi un fonction universelle ce qui signifie qu’il possède d’autres fonctionnalités et méthodes utiles pour travailler avec des tableaux multidimensionnels. Par exemple, vous pouvez calculer le maximum cumulé sur un tableau (ou un axe particulier du tableau):

>>> d = np.array([2, 0, 3, -4, -2, 7, 9])
>>> np.maximum.accumulate(d)
array([2, 2, 3, 3, 3, 7, 9])

Ce n'est pas possible avec np.max.

Tu peux faire np.maximum imiter np.max dans une certaine mesure lors de l'utilisation np.maximum.reduce:

>>> np.maximum.reduce(d)
9
>>> np.max(d)
9

Les tests de base suggèrent que les deux approches sont comparables en termes de performances.


61
2017-11-06 15:13



Vous avez déjà dit pourquoi np.maximum est différent - il retourne un tableau qui est le maximum d'éléments entre deux tableaux.

Pour ce qui est de np.amax et np.max: ils appellent tous deux la même fonction - np.max est juste un alias pour np.amax, et ils calculent le maximum de tous les éléments d'un tableau, ou le long d'un axe d'un tableau.

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>

7
2017-11-06 15:11