web-dev-qa-db-fra.com

numpy.max ou max? Lequel est le plus rapide?

En python, lequel est le plus rapide?

numpy.max(), numpy.min()

ou

max(), min()

Ma longueur de liste/tableau varie de 2 à 600. Laquelle dois-je utiliser pour économiser du temps d'exécution?

32
Froyo

Eh bien, d'après mon timing, il s'ensuit que si vous avez déjà un tableau numpy a vous devez utiliser a.max (la source indique que c'est la même chose que np.max si a.max disponible). Mais si vous avez une liste intégrée, la plupart du temps prend conversion en np.ndarray => c'est pourquoi max est meilleur dans votre timing.

Essentiellement: si np.ndarray puis a.max, si list et pas besoin de toutes les machines de np.ndarray puis standard max.

43
gorlum0

J'étais également intéressé par cela et j'ai testé les trois variantes avec perfplot (un petit projet à moi). Résultat: vous ne vous trompez pas avec a.max().

enter image description here

Code pour reproduire l'intrigue:

import numpy
import perfplot

perfplot.show(
    setup=lambda n: numpy.random.Rand(n),
    kernels=[
        max,
        numpy.max,
        lambda a: a.max()
        ],
    labels=['max(a)', 'numpy.max(a)', 'a.max()'],
    n_range=[2**k for k in range(25)],
    logx=True,
    logy=True,
    xlabel='len(a)'
    )
23
Nico Schlömer

Il est probablement préférable d'utiliser quelque chose comme le Python module timeit pour le tester par vous-même. De cette façon, vous pouvez tester vos propres données dans votre propre environnement, plutôt que de vous fier à sur des tiers avec diverses données de test et environnements qui ne sont pas nécessairement représentatifs des vôtres.

10
srgerg

numpy.min et numpy.max ont des sémantiques (et des signatures d'appels) légèrement différentes de celles intégrées, donc le choix ne devrait pas être lié à la vitesse. Utilisez les versions numpy si vous devez être en mesure de gérer les données multidimensionnelles en toute sécurité. Si vous utilisez simplement Python listes ou autres choses qui ne connaissent pas la dimensionnalité, utilisez les fonctions intégrées).

2
lvc