[PYTHON] Langsame Verwendung der Computersprache 2

Langsame Verwendung der Computersprache 2

Es gibt viele Möglichkeiten, Ihren Computer zu verlangsamen.

Hier ist ein Beispiel für Python Numpy. wie folgt B = A [3: 6] erstellt keine Kopie, sondern ist nur ein Alias für das Subarray. Da es sich um einen Alias handelt, wird beim Ändern des Elements von B auch das ursprüngliche Array geändert.

C = A [3: 6] +0 erstellt eine Kopie. Das Ändern der Kopie ändert daher nicht das ursprüngliche Array. Wenn Sie diesen Unterschied nicht kennen würden, würden Sie sagen: "Ich wollte die Kopie ändern, aber die ursprüngliche Reihenfolge hat sich geändert." Es wird Fehler verursachen, die Anfängern häufig sind.

>>> 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] # Hiermit wird keine Kopie erstellt >>> B[0]=-3 >>> A array([ 0, 1, 2, -3, 4, 5, 6, 7, 8, 9]) \ >>>> C = A [3: 6] +0 # Dies erstellt eine Kopie >>> C array([-3, 4, 5]) >>> C[0]=-30 >>> A array([ 0, 1, 2, -3, 4, 5, 6, 7, 8, 9]) >>>

Es ist auch schneller, wenn Sie die Zuordnung durch eine In-situ-Zuordnung ersetzen. Erwägen Sie die Verwendung von * =, + =, - = usw.

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)

** Ausführungsergebnis ** 1.09951162778e+12 1.09951162778e+12 0.116400550283 # a = a*2 0.0270198481919 # a *= 2 0.23212818261

Die Bearbeitungszeit wurde auf 23% reduziert (4-mal schneller).

** Zusammenfassung ** ・ Erstellen Sie keine Kopie im Teilarray ・ Verwenden Sie nicht "* =", wenn "* =" ausreicht.

Für Python "High Performance Python" Du solltest lesen.

Recommended Posts

Langsame Verwendung der Computersprache 2
Wie man die Computersprache langsam benutzt
Verwendung von xml.etree.ElementTree
Wie benutzt man Python-Shell
Hinweise zur Verwendung von tf.data
Verwendung von virtualenv
Wie benutzt man Seaboan?
Verwendung von Image-Match
Wie man Shogun benutzt
Verwendung von Pandas 2
Verwendung von numpy.vectorize
Verwendung von pytest_report_header
Wie man teilweise verwendet
Wie man Bio.Phylo benutzt
Verwendung von SymPy
Wie man x-means benutzt
Verwendung von WikiExtractor.py
Verwendung von IPython
Verwendung von iptables
Wie benutzt man numpy?
Verwendung von TokyoTechFes2015
Wie benutzt man venv
Verwendung des Wörterbuchs {}
Wie benutzt man Pyenv?
Verwendung der Liste []
Wie man Python-Kabusapi benutzt
Verwendung von OptParse
Verwendung von return
Wie man Imutils benutzt
Verwendung von Qt Designer
Verwendung der Suche sortiert
[gensim] Verwendung von Doc2Vec
python3: Verwendung der Flasche (2)
Verwendung des Generators
[Python] Verwendung von Liste 1
Wie benutzt man Python Argparse?
Verwendung von IPython Notebook
Wie man Pandas Rolling benutzt
[Hinweis] Verwendung von virtualenv
Verwendung von Redispy-Wörterbüchern
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
[Go] Verwendung von "... (3 Perioden)"
So bedienen Sie GeoIp2 von Django
[Python] Verwendung von input ()
Wie benutzt man den Dekorateur?
[Einführung] Verwendung von open3d
Wie benutzt man Python Lambda?
So verwenden Sie Jupyter Notebook
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
So verwenden Sie Google Colaboratory
Verwendung von Python-Bytes
Verwendung von cron (persönliches Memo)
Python: So verwenden Sie Async mit
Verwendung der Zip-Funktion