Je vais avoir un Lightning Talk sur Python au travail, donc je vais écrire quelque chose qui peut être lu dans environ 5 minutes. Le thème de la discussion est "Connaissance pour essayer d'accélérer avec Python". ** Ce n'est pas un article qui dissipe Python. ** **
Cet article est destiné à:
--Python débutant
Comme le titre l'indique, si vous voulez accélérer avec Python, n'écrivez pas Python (autant que possible). Le but de cet article est de réduire la quantité d'écriture en Python et d'augmenter la vitesse de traitement.
Maintenant, immédiatement, ** Python est un langage lent ** comparé à C ++ et Java. La lenteur de Python est mentionnée dans divers articles tels que:
En résumé, Python est considéré comme lent, principalement pour les raisons suivantes:
--Parce que c'est un langage de type interpréteur (pas de type compilé) --Parce que c'est un langage typé dynamiquement
Cependant, les tâches lourdes couramment considérées comme l'apprentissage automatique et le traitement d'images sont activement exécutées à l'aide de Python. Pourquoi ces processus s'exécutent-ils à une vitesse pratique? C'est parce que ** la plupart des traitements ne sont pas écrits en Python **.
En d'autres termes, si vous souhaitez augmenter la vitesse de traitement de Python, ne faites pas de traitement lourd en Python, mais laissez-le aux fonctions standard et aux bibliothèques écrites en C ++ etc.
Regardez les deux fonctions ci-dessous.
fastCode ()
est une fonction qui vous permet d'exécuter rapidement. slowCode ()
est une fonction lente.
import numpy as np
#Code rapide
def fastCode():
#La liste est déclarée en notation de liste
list1 = [ i for i in range(0,10000)]
list2 = [ i for i in range(-10000,0)]
#Utilisez les fonctions standard autant que possible
listSum = sum(list1)
#Utilisez numpy pour effectuer une grande quantité de calculs dans une formule matricielle
array1 = np.array(list1)
array2 = np.array(list2)
#Ajoutez tous les éléments de array1 et array2
# [0, 1, 2, ...] + [-100000, -99999, -99998, ...]
# >> [-100000, -99998, -99996, ...]
array3 = array1 + array2
#Multipliez tous les éléments de array1 et array2
# [0, 1, 2, ...] * [-100000, -99999, -99998, ...]
# >> [0, -99999, -199996, ...]
array4 = array1 * array2
#Code lent
def slowCode():
#Créer une liste en utilisant append
list1 = []
for i in range(0,10000):
list1.append(i)
list2 = []
for i in range(-10000,0):
list2.append(i)
#Calculez le total en tournant avec l'instruction for sans utiliser la fonction standard
listSum = 0
for value in list1:
listSum += value
#Faites beaucoup de calculs avec une instruction for
list3 = []
list4 = []
for i , value in enumerate(list1):
list3.append(value + list2[i])
list4.append(value * list2[i])
Vous pouvez voir que fastCode ()
confie le traitement à des fonctions et bibliothèques standard et peut être codé court, tandis que slowCode ()
utilise l'instruction for pour décrire le traitement par lui-même. Je pense que tu peux.
Les vitesses de traitement réelles sont les suivantes.
une fonction | Nombre de lignes hors commentaires | Vitesse d'exécution(100 courses en moyenne) |
---|---|---|
fastCode() | 7 lignes | 0.00207[sec] |
slowCode() | 14 lignes | 0.00430[sec] |
Les fonctions et bibliothèques standard sont composées de ** binaires compilés ** écrits en C / C ++, et en les laissant gérer le traitement, même les tâches lourdes peuvent être traitées à grande vitesse. D'un point de vue «accéléré», Python est, pour ainsi dire, un ** langage pour une utilisation facile des bibliothèques rapides **.
Si vous souhaitez accélérer le processus en Python, utilisez les techniques suivantes pour minimiser le processus écrit en Python.
--Utilisez des fonctions standard et des bibliothèques écrites en C / C ++ haute vitesse
Il existe de nombreuses façons d'accélérer Python autres que celles mentionnées ici. Cependant, je pense que c'est la première chose à savoir lors de l'accélération avec Python. Lorsque vous avez besoin de trouver plus de vitesse, commençons par votre propre bibliothèque, pré-référence de fonctions, Cython, Numba, etc.
Pourquoi Python est-il si lent? | POSTD L'instruction Python for est-elle lente? - journal deatsuoishimoto Comparaison de vitesse de Python, Java, C ++ --Qiita [Introduction à Python C API] Créez un module d'extension en C / C ++ et appelez-le depuis Python -Partie 1- Python Tips for Acceleration-A Leisure Engineer's Diary