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

En python, lequel est le plus rapide ?

numpy.max(), numpy.min()

ou

max(), min()

La longueur de ma liste/tableau varie de 2 à 600. Lequel devrais-je utiliser pour gagner du temps ?

28
demandé sur Froyo 2012-06-08 08:31:55

4 réponses

Eh bien de mes timings il suit si vous avez déjà numpy array 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 la liste intégrée alors la plupart du temps prend conversion en np.ndarray => c'est pourquoi max est meilleur dans vos timings.

Dans essense: si np.ndarraya.max, si list et pas besoin de toutes les machines de np.ndarray puis standard max.

39
répondu gorlum0 2012-06-08 07:46:48

j'étais également intéressé par ceci et j'ai testé les trois variantes avec perfplot (un petit projet à moi). Résultat: vous n'allez pas Vous tromper 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)'
    )
20
répondu Nico Schlömer 2018-06-19 14:27:40

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

9
répondu srgerg 2012-06-08 04:37:12

numpy.min et numpy.max ont une sémantique légèrement différente (et des signatures d'appel) des builtins, donc le choix ne devrait pas être lié à la vitesse. Utilisez les versions numpy si vous avez besoin d'être en mesure de traiter les données multidimensionnelles sainement. Si vous utilisez simplement des listes Python ou d'autres choses qui ne connaissent pas la dimensionalité, utilisez les builtins.

2
répondu lvc 2012-06-08 04:39:15