[PYTHON] Das explizite Schreiben einer Schleife mit numpy ist extrem langsam

Wie in "Wie man die Computersprache langsam benutzt" erwähnt Das explizite Schreiben einer Schleife mit numpy ist extrem langsam. Das Folgende ist eine Geschichte für Anfänger.

Ich habe den Code geschrieben, um damit zu experimentieren.

matmul.py


# -*- coding: utf-8 -*-
u"""
Geschwindigkeitsvergleich des Matrixbetriebs
"""

def matmul1(a, b):
    lenI = a.shape[0]
    lenJ = a.shape[1]
    lenK = b.shape[1]
    c = np.zeros((lenI, lenJ))
    for i in range(lenI):
        for j in range(lenJ):
            for k in range(lenK):
                c[i, j] += a[i, k] * b[k, j]
    return c

def matmul2(a, b):
    lenI = a.shape[0]
    lenJ = a.shape[1]
    lenK = b.shape[1]
    c = np.zeros((lenI, lenJ))
    for i in range(lenI):
        for k in range(lenK):
            for j in range(lenJ):
                c[i, j] += a[i, k] * b[k, j]
    return c

import numpy as np
a = np.random.randn(200, 200)
b = np.random.randn(200, 200)
print a.shape

c2 = matmul2(a, b)
print c2

c = matmul1(a, b)
print c

c3 = np.dot(a, b)
print c3

In der IPython-Konsole Führen Sie diesen Code einmal aus, um die Funktionsdefinition zu aktivieren Ich habe mit% timeit verglichen. Es macht einen Unterschied von 20 mal.

%timeit c2 = matmul2(a, b) 1 loops, best of 3: 7.39 s per loop

%timeit c1 = matmul1(a, b) 1 loops, best of 3: 7.31 s per loop

%timeit c3 =np.dot(a, b) 1000 loops, best of 3: 321 µs per loop

Zusammenfassung Bei Verwendung einer Bibliothek, die für Matrixoperationen wie numpy optimiert ist Schreiben Sie grundsätzlich keine for-Anweisung, die einzeln auf die Elemente der Matrix zugreift. Lesen Sie die Numpy-Dokumentation, um herauszufinden, welche Funktion aufgerufen werden soll. Für die integrierte Spyder-Umgebung [Hilfe] [Installierte Python-Module] Sie können die Numpy-Dokumentation lesen.

Sehen Sie, wie schnell Sie mit NumPy / SciPy beschleunigen können

In Verbindung stehender Artikel

Schreiben Sie in der Bildverarbeitung nicht so viele Doppelschleifen wie möglich

Recommended Posts

Das explizite Schreiben einer Schleife mit numpy ist extrem langsam
Beim Schreiben eines Programms in Python
Hash in Perl ist ein Wörterbuch in Python
Ist Pythons Operator langsam? (Von ABC167D)
Python-Programm ist langsam! Ich möchte beschleunigen! In einem solchen Fall ...
Ein Memo, das ich in Python zusammengeführt habe
Erstellen Sie in KiCad ein Rahmenantennenmuster in Python