N'écrivez pas Python si vous voulez l'accélérer avec Python

introduction

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. ** **

Qui est la cible de cet article

Cet article est destiné à:

--Python débutant

Conclusion immédiate

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.

Python est lent en premier lieu

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 **.

Que voulez-vous dire

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 **.

Résumé

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

finalement

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.

référence

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

Recommended Posts

N'écrivez pas Python si vous voulez l'accélérer avec Python
Indispensable si vous utilisez Python! Comment utiliser Numpy pour accélérer les calculs!
[TensorFlow] Si vous souhaitez exécuter TensorBoard, installez-le avec pip.
Je veux écrire dans un fichier avec Python
Si vous souhaitez inclure awsebcli dans CircleCI, spécifiez la version de python
Deux outils de génération de documents que vous souhaitez absolument utiliser si vous écrivez python
Comment écrire des variables d'environnement que vous ne voulez pas mettre sur [GitHub] Python
[OpenCV] Lorsque vous voulez vérifier s'il est lu correctement avec imread
Écrire en csv avec Python
Pour ceux qui veulent écrire Python avec vim
Si vous voulez créer un bot discord avec python, utilisons un framework
Si vous ne savez pas comment dessiner le graphique que vous voulez avec matplotlib, il est pratique de regarder la galerie
[Python] Si vous souhaitez soudainement créer un formulaire de demande
Si vous écrivez TinderBot en Python, elle peut le faire
Numba pour accélérer en Python
[Python] Ecrire dans un fichier csv avec Python
Ravi de vous rencontrer avec python
Accélérez grossièrement Python avec numba
Comment accélérer les calculs Python
Je veux déboguer avec Python
Si vous souhaitez devenir data scientist, commencez par Kaggle
Que faire si vous ne pouvez pas installer pyaudio avec pip #Python
Je veux savoir si vous installez Python sur Mac ・ Iroha
Si vous souhaitez affecter une exportation csv à une variable en python
Je veux analyser les journaux avec Python
Je veux jouer avec aws avec python
Si vous écrivez un test piloté par table go en python, il peut être préférable d'utiliser subTest
Je veux le faire avec Python lambda Django, mais je vais m'arrêter
Je veux tweeter Twitter avec Python, mais j'y suis accro
Que faire si vous ne parvenez pas à envoyer un e-mail à Yahoo avec Python.
Lorsque vous souhaitez l'utiliser tel quel lorsque vous l'utilisez avec lambda memo
Que faire si ipython et python démarrent avec des versions différentes
18 beaux termes Python que vous voulez lire à haute voix. R18 avec des exemples de phrases
[Python] Si vous souhaitez dessiner un diagramme de dispersion de plusieurs clusters
Si vous souhaitez obtenir plusieurs statistiques avec groupby of pandas v1
Si vous souhaitez compter les mots en Python, il est pratique d'utiliser Counter.
Création de code QR avec Python. Je ne veux pas faire la queue parce que j'écris la même chose chaque fois que je délivre un laissez-passer de banlieue. ..
Je veux utiliser MATLAB feval avec python
Je veux faire un jeu avec Python
Si vous souhaitez créer Word Cloud.
[Écrire sur la carte avec plotly] Visualisation dynamique avec plotly [python]
Je souhaite utiliser le répertoire temporaire avec Python2
Je ne veux pas utiliser -inf avec np.log
#Unresolved Je veux compiler gobject-introspection avec Python3
Je veux résoudre APG4b avec Python (chapitre 2)
Écrire des données CSV sur AWS-S3 avec AWS-Lambda + Python
[Python] Faites de votre mieux pour accélérer SQL Alchemy
AssertNumQueries est utile si vous souhaitez tester facilement une requête N + 1 avec django
Si vous souhaitez créer une application TODO (distribuée) maintenant en utilisant uniquement Python
Je veux écrire un élément dans un fichier avec numpy et le vérifier.
Appelez Rust de Python pour accélérer! Tutoriel PyO3: Partie des classes d'habillage ➀
Ce que vous voulez mémoriser avec la grammaire de base de "manipulation de chaînes" de python
Appelez Rust de Python pour accélérer! Tutoriel PyO3: partie des classes d'emballage ➁
Que faire si vous obtenez une erreur lors de l'installation de python avec pyenv
Le programme Python est lent! Je veux accélérer! Dans ce cas ...
nb_conda_kernels est recommandé si vous souhaitez entrer dans l'environnement virtuel avec jupyter
Si vous essayez d'installer Python2 pip après avoir installé Python3 pip et qu'il est rejeté
Je veux écrire en Python! (1) Vérification du format de code