[PYTHON] Comment utiliser lentement le langage informatique

Il existe un moyen de l'utiliser tardivement dans n'importe quelle langue. J'ai utilisé la méthode pour l'utiliser tardivement Il est facile de dire: «La langue XX, la bibliothèque est lente». Voici certaines choses que les débutants ont tendance à faire.

-Pour ajouter un élément de liste, le résultat de la concaténation à la liste avec l'opérateur + est affecté à la liste.

ex.py


a = []
for i in range(1000):
    a = a + [i]

・ Malgré le fait qu'il existe une méthode efficace pour ajouter la liste à la liste Il répète l'ajout d'éléments individuels. (Dans le cas de python, il existe une méthode d'extension.)

・ Lorsque la structure de données n'est pas correctement utilisée conformément à l'objectif Les listes sont utilisées pour un traitement suffisant dans les dictionnaires et les ensembles.   C'est O (N) pour s'assurer que la liste contient des valeurs  if x in listData: S'il est inclus dans la clé du dictionnaire est O (1)  if dictData.has_key(x): S'il est inclus dans l'ensemble est O (1)  if x in setData:

・ Sans remarquer qu'il peut être exécuté efficacement en utilisant les fonctions incluses dans la bibliothèque standard. Je fais une implémentation lente avec ma propre bibliothèque.

Dans une bibliothèque qui fournit un format de données appelé ensemble, recherchez la fusion, la partie commune et la différence de l'ensemble. Une méthode est fournie. Pour le type d'ensemble Python s.union(t) s.intersection(t) s.difference(t)

Avec eux, vous vous retrouverez probablement avec un programme concis qui s'exécute plus rapidement que votre propre bibliothèque. Je vais.

-Faites une copie d'un objet inutile. Exemple: Un langage / bibliothèque qui permet aux sous-tableaux d'être décrits de manière concise et passés comme arguments sans faire de copie. Malgré cela, je fais une copie et je la remets. En C ++, le type OpenCV cv :: Mat peut passer une image partielle comme argument de fonction. Le type de tableau Numpy de Python peut également passer un sous-tableau comme argument de fonction.

Exemple: en C ++, vous pouvez passer par référence, mais vous passez par valeur, Faites une copie d'un objet inutile. (Un programme de texte insuffisant est suffisant pour enseigner uniquement le passage par valeur et le passage par pointeur en C ++.)

・ Malgré le fait que la bibliothèque est conçue pour effectuer efficacement des calculs matriciels Dans une telle bibliothèque, les opérations matricielles sont traitées dans une boucle d'instructions for. (MATLAB, python numpy, etc.)

ex2.py


# -*- coding: utf-8 -*-
def func1():
    b=['d', 'e', 'f', 'g', 'h', 'i', 'j',  'k', 'l',  'm', 'n', 'o', 'p', 'q', 'r', 's']
    for i in range(10000):
        a=['a', 'b', 'c']
        
        for x in b:
            a= a+[x]
        
#        print a
def func2():
    b=['d', 'e', 'f', 'g', 'h', 'i', 'j',  'k', 'l',  'm', 'n', 'o', 'p', 'q', 'r', 's']
    for i in range(10000):
        a=['a', 'b', 'c']
        
        for x in b:
            a.append(x)
        
#        print a
def func3():
    b=['d', 'e', 'f', 'g', 'h', 'i', 'j',  'k', 'l',  'm', 'n', 'o', 'p', 'q', 'r', 's']
    for i in range(10000):
        a=['a', 'b', 'c']
        a = a+b
        
#        print a
def func4():
    b=['d', 'e', 'f', 'g', 'h', 'i', 'j',  'k', 'l',  'm', 'n', 'o', 'p', 'q', 'r', 's']
    for i in range(10000):
        a=['a', 'b', 'c']
        
        a.extend(b)
        
 #       print a
        
if __name__=='__main__':
    func1()
    func2()
    func3()
    func4()

Dans le cas de Python, vous pouvez prendre un profil sans réécrire le script en utilisant [Exécuter] [Profil] dans l'environnement intégré de Spyder.

Résumé: Utilisez les méthodes append et extend pour ajouter des données à la liste. Ce n'est pas une bonne idée de répéter l'affectation à l'aide de l'opérateur +. Utilisez différentes structures de données telles que des listes, des dictionnaires et des ensembles. Utilisez les méthodes de structure de données présentes dans les bibliothèques standard et évitez de créer vous-même des fonctionnalités équivalentes. Ne faites pas de copies inutiles des données. N'utilisez pas les boucles for qui peuvent être exécutées sans boucles for dans les opérations de tableau.

Post-scriptum: Si vous souhaitez en savoir plus sur ces contenus, "Python hautes performances" Vous devriez lire. Au moment de la rédaction de cet article, cette traduction japonaise n'avait pas été publiée.

Informations de référence Comparaison de vitesse pour l'ajout de listes Python (ajout, notation d'inclusion, etc.) http://nonbiri-tereka.hatenablog.com/entry/2014/10/20/110304

Recommended Posts

Comment utiliser lentement le langage informatique 2
Comment utiliser lentement le langage informatique
Comment utiliser xml.etree.ElementTree
Comment utiliser Python-shell
Remarques sur l'utilisation de tf.data
Comment utiliser virtualenv
Comment utiliser Seaboan
Comment utiliser la correspondance d'image
Comment utiliser Pandas 2
Comment utiliser Virtualenv
Comment utiliser pytest_report_header
Comment utiliser Bio.Phylo
Comment utiliser SymPy
Comment utiliser x-means
Comment utiliser WikiExtractor.py
Comment utiliser IPython
Comment utiliser virtualenv
Comment utiliser Matplotlib
Comment utiliser iptables
Comment utiliser numpy
Comment utiliser TokyoTechFes2015
Comment utiliser venv
Comment utiliser le dictionnaire {}
Comment utiliser Pyenv
Comment utiliser python-kabusapi
Comment utiliser le retour
Comment utiliser pyenv-virtualenv
Comment utiliser imutils
Comment utiliser Qt Designer
Comment utiliser la recherche triée
[gensim] Comment utiliser Doc2Vec
python3: Comment utiliser la bouteille (2)
Comprendre comment utiliser django-filter
[Python] Comment utiliser la liste 1
Comment utiliser FastAPI ③ OpenAPI
Comment utiliser IPython Notebook
Comment utiliser Pandas Rolling
[Note] Comment utiliser virtualenv
Python: comment utiliser pydub
[Python] Comment utiliser checkio
Comment faire fonctionner GeoIp2 de Django
[Python] Comment utiliser input ()
Comment utiliser le décorateur
[Introduction] Comment utiliser open3d
Comment utiliser Python lambda
Comment utiliser Jupyter Notebook
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser Google Colaboratory
Comment utiliser les octets Python
Comment utiliser Python Kivy ① ~ Bases du langage Kv ~
Comment utiliser cron (mémo personnel)
Python: comment utiliser async avec
Comment utiliser la fonction zip
Comment utiliser le module optparse
Comment utiliser SWIG de WAF
Résumé de l'utilisation de pandas.DataFrame.loc