[PYTHON] Comment utiliser lentement le langage informatique 2

Comment utiliser lentement le langage informatique 2

Il existe de nombreuses façons de ralentir votre ordinateur. -Ne faites pas de copies inutiles lorsque vous travaillez avec des sous-matrices. Lorsque le langage / la bibliothèque de traitement prend en charge la notation concise du sous-tableau, au lieu de faire une copie constituée du sous-tableau, le sous-tableau lui-même doit être traité comme un argument de la fonction.

Voici un exemple de Python numpy. comme suit B = A [3: 6] ne fait pas de copie, c'est juste un alias pour le sous-tableau. Puisqu'il s'agit d'un alias, si vous modifiez l'élément de B, il passera également au tableau d'origine.

C = A [3: 6] +0 fait une copie. Par conséquent, la modification de la copie ne modifie pas la matrice d'origine. Si vous ne connaissiez pas cette différence, vous diriez: "J'avais l'intention de changer la copie, mais la séquence d'origine a changé." Cela provoquera des erreurs communes aux débutants.

>>> import numpy as np >>> A=np.arange(0,10,1) >>> A array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> A[3:6] array([3, 4, 5]) \ >>>> B = A [3: 6] # Cela ne fait pas de copie >>> B[0]=-3 >>> A array([ 0, 1, 2, -3, 4, 5, 6, 7, 8, 9]) \ >>>> C = A [3: 6] +0 # Ceci fait une copie >>> C array([-3, 4, 5]) >>> C[0]=-30 >>> A array([ 0, 1, 2, -3, 4, 5, 6, 7, 8, 9]) >>>

C'est également plus rapide si vous remplacez l'affectation par une affectation in situ. Pensez à utiliser * =, + =, - =, etc.

inplace.py


# -*- coding: utf-8 -*-
import cv2
import numpy as np
e0 = cv2.getTickCount()
a = np.ones((1024, 1024))
for i in range(20):
    a = a*2
print np.sum(a[:])

e1 = cv2.getTickCount()

a = np.ones((1024, 1024))
for i in range(20):
    a *= 2
print np.sum(a[:])
e2 = cv2.getTickCount()
print (e1 - e0) / cv2.getTickFrequency(), "# a = a*2"
print (e2 - e1) / cv2.getTickFrequency(), "# a *= 2"
print (e2 - e1) / (e1 - e0)

** Résultat d'exécution ** 1.09951162778e+12 1.09951162778e+12 0.116400550283 # a = a*2 0.0270198481919 # a *= 2 0.23212818261

Le temps de traitement a été réduit à 23% (4 fois plus rapide).

** Résumé ** ・ Ne faites pas de copie dans le tableau partiel ・ N'utilisez pas "* =" lorsque "* =" est suffisant.

Pour Python, "Python hautes performances" Vous devriez lire.

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 le shogun
Comment utiliser Pandas 2
Comment utiliser numpy.vectorize
Comment utiliser pytest_report_header
Comment utiliser partiel
Comment utiliser Bio.Phylo
Comment utiliser SymPy
Comment utiliser x-means
Comment utiliser WikiExtractor.py
Comment utiliser IPython
Comment utiliser iptables
Comment utiliser numpy
Comment utiliser TokyoTechFes2015
Comment utiliser venv
Comment utiliser le dictionnaire {}
Comment utiliser Pyenv
Comment utiliser la liste []
Comment utiliser python-kabusapi
Comment utiliser OptParse
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)
Comment utiliser le générateur
[Python] Comment utiliser la liste 1
Comment utiliser Python Argparse
Comment utiliser IPython Notebook
Comment utiliser Pandas Rolling
[Note] Comment utiliser virtualenv
Comment utiliser les dictionnaires redis-py
Python: comment utiliser pydub
[Python] Comment utiliser checkio
[Aller] Comment utiliser "... (3 périodes)"
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 cron (mémo personnel)
Python: comment utiliser async avec
Comment utiliser la fonction zip