7
votes

Pourquoi NUMPY PLOWER est-il plus lent que Python? Comment rendre le code performer

Je reviens mon filet neural de python pure à Numpy, mais maintenant, cela fonctionne encore plus lentement. J'ai donc essayé ces deux fonctions:

def d():
    a = [1,2,3,4,5]
    b = [10,20,30,40,50]
    c = [i*j for i,j in zip(a,b)]
    return c

def e():
    a = np.array([1,2,3,4,5])
    b = np.array([10,20,30,40,50])
    c = a*b
    return c


2 commentaires

Peut-être que connexe: Stackoverflow.com/Questtions/5956783/...


Vous devez utiliser un tableau plus grand pour ce type de test


4 Réponses :


14
votes

Je supposerais que la divergence est parce que vous construisez des listes et des tableaux dans E code> alors que vous construisez uniquement des listes dans d code>. Considérons: xxx pré>

ici les fonctions f code> et g code> Évitez de recréer les listes / tableaux à chaque fois autour et nous obtenons des performances très similaires:

0.602419137955
0.0263929367065


0 commentaires

3
votes
import time , numpy
def d():
    a = range(100000)
    b =range(0,1000000,10)
    c = [i*j for i,j in zip(a,b)]
    return c

def e():
    a = numpy.array(range(100000))
    b =numpy.array(range(0,1000000,10))
    c = a*b
    return c



#python ['0.04s', '0.04s', '0.04s']
#numpy ['0.02s', '0.02s', '0.02s']
try it with bigger arrays... even with the overhead of creating arrays numpy is much faster

0 commentaires

2
votes

Les structures de données numpues sont plus lentes sur l'ajout / construire

quelques tests: xxx

résultats: xxx


0 commentaires

-1
votes

Je ne pense pas que NUMPY est lent, car il doit tenir compte du temps nécessaire pour écrire et déboguer. Plus le programme est long, plus il est difficile de trouver des problèmes ou d'ajouter de nouvelles fonctionnalités (heure du programmeur). Par conséquent, d'utiliser une langue de niveau supérieur permet, à l'égalité de temps d'intelligence et de compétences, de créer un complexe de programme et potentiellement plus efficace.

Quoi qu'il en soit, certains outils intéressants à optimiser sont:

- PSYCO est un JIT (juste à temps, "temps réel"), qui optimise à l'exécution du code.

- numexpr , la parallélisation est un bon moyen d'accélérer l'exécution d'un programme, à condition que ce soit suffisamment séparable.

- tissage est un module dans NUMPY pour communiquer Python et C. L'une de ses fonctions est de blitz, qui prend une gamme de python, le traduit de manière transparente C et chaque fois que l'appel est exécuté. version optimisée. En faisant cette première conversion, il faut environ une seconde, mais une vitesse supérieure obtenez généralement tout ce qui précède. Ce n'est pas comme NUMEXPR ou PSYCO Bytecode, ni interface C comme numppy, mais votre propre fonction écrite directement dans C et entièrement compilée et optimisée.


0 commentaires