[PYTHON] Ich dachte, es wäre langsam, die for-Anweisung in NumPy zu verwenden, aber das war nicht der Fall.

Inspiriert von Das explizite Schreiben einer Schleife mit Numpy ist extrem langsam

In dem obigen Artikel wurde gesagt, dass das explizite Schreiben für extrem langsam sein würde. Zum Beispiel

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

Code like ist langsamer als np.dot.

%timeit matmul1(a, b)
1 loops, best of 3: 12.9 s per loop
%timeit np.dot(a, b)
10 loops, best of 3: 20.7 ms per loop

Es ist langsam, weil es auf meinem Notebook-PC berechnet wird. Außerdem ist atlas / mkl nicht verknüpft.

Verwenden Sie hier Numba.

import numba

@numba.jit  #Nur hier hinzufügen
def matmul1_jit(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

Dies ist eine JIT-Kompilierung von Python-Code mit LLVM, sodass sie sehr schnell ausgeführt werden kann. Der erste Aufruf enthält die Zeit zum Kompilieren. Wenn Sie also die Geschwindigkeit bei nachfolgenden Aufrufen messen:

%timeit matmul1_jit(a, b)
10 loops, best of 3: 24.4 ms per loop

Nur eine Zeile wie diese hinzuzufügen, machte es ungefähr gleich wie "np.dot" (ungefähr 20% langsamer).

Platzieren Sie das gesamte ipynb in gist. Ich wünschte, ich könnte nbviewer in Qiita einbetten.

Recommended Posts

Ich dachte, es wäre langsam, die for-Anweisung in NumPy zu verwenden, aber das war nicht der Fall.
Zum ersten Mal in Numpy werde ich es von Zeit zu Zeit aktualisieren
Praktisch, um Matplotlib-Unterzeichnungen in for-Anweisungen zu verwenden
Ich wusste nicht, wie ich die [Python] für die Anweisung verwenden sollte
Es kann ein Problem sein, Japanisch für Ordnernamen und Notizbuchnamen in Databricks zu verwenden
Ich möchte eine Datei, die keine bestimmte Zeichenfolge ist, als logrotate Ziel angeben, aber ist es unmöglich?
Wenn Sie von Mia Nanasawas Bild geheilt werden möchten, klicken Sie auf die Twitter-API ♪
Ich möchte komplizierte vier Regeln in der IF-Anweisung der Django-Vorlage verwenden! → Verwenden Sie eine benutzerdefinierte Vorlage
Obwohl ich wusste, dass der Kurs für maschinelles Lernen im Beispiel gut war, habe ich ihn zwei Jahre lang durchlaufen, aber er war immer noch gut
Ich habe versucht, eval (a, b) für Fibonacci zu verwenden, aber es war nicht schnell
Ich wollte das Suchmodul von Ansible2 verwenden, aber es hat einige Zeit gedauert, machen Sie sich also eine Notiz
So speichern Sie die Feature-Point-Informationen des Bildes in einer Datei und verwenden sie zum Abgleichen
Ich habe versucht, die Pferde vorherzusagen, die mit LightGBM unter den Top 3 sein werden
Ich suchte nach den Fähigkeiten, die erforderlich sind, um Webingenieur bei Python zu werden
Python-Programm ist langsam! Ich möchte beschleunigen! In einem solchen Fall ...
[Python] Ich möchte nur den Index verwenden, wenn ich eine Liste mit einer for-Anweisung schleife
Ich habe versucht, YouTube zu kratzen, aber ich kann die API verwenden, also tu es nicht.
Ich werde versuchen, die Links zusammenzufassen, die vorerst nützlich erscheinen
Es wäre klug, wenn Sie etwas wie Boolesches und "A" oder "B" schreiben könnten [Python] [Aber]
Ich habe versucht, eine Memo-App zu erstellen, die Pomodoro sein kann, aber eine Reflexionsaufzeichnung
Mir wurde klar, dass es Unsinn ist, es ohne nachzudenken zu verwenden, weil das Modul praktisch ist
Was den in Honchos Procfile geschriebenen Prozesstyp betrifft, war ich über eine Stunde lang süchtig danach, weil ich ihn nicht verwenden konnte - also werde ich ihn als Show schreiben.
Wenn Sie in der for-Anweisung plt.save möchten
Ich möchte R-Datensatz mit Python verwenden
[C / C ++] Übergeben Sie den in C / C ++ berechneten Wert an eine Python-Funktion, um den Prozess auszuführen, und verwenden Sie diesen Wert in C / C ++.
Ist es ein Problem, den Bedarf an analogen Humanressourcen in der KI-Ära zu beseitigen?
[Teil 1] Ich habe versucht, den in Maske R-CNN aufgetretenen Fehler "Benutzerwarnung: Eine Eingabe konnte nicht abgerufen werden. Dies kann daran liegen, dass ein Mitarbeiter gestorben ist" zu beheben.
[Teil 2] Ich habe versucht, den in Maske R-CNN aufgetretenen Fehler "Benutzerwarnung: Eine Eingabe konnte nicht abgerufen werden. Dies kann daran liegen, dass ein Mitarbeiter gestorben ist" zu beheben.
Ich möchte den Unterschied zwischen der for-Anweisung in der Python + numpy-Matrix und der Julia for-Anweisung auffangen
Ich habe eine Funktion zum Trimmen des Bildes von Python openCV erstellt. Verwenden Sie sie daher bitte.
Erstellt ein Tool, mit dem Sie bequem Parameter für Modelle des maschinellen Lernens festlegen können
Verwendung der Methode __call__ in der Python-Klasse
Verwenden Sie MeCab, um schlampige Sätze "langsam" zu übersetzen.
So definieren Sie mehrere Variablen in einer Python for-Anweisung
Ich habe es in der Sprache Go geschrieben, um das SOLID-Prinzip zu verstehen
Ich möchte vorerst eine Docker-Datei erstellen.
Ich habe ein Skript geschrieben, das das Bild in zwei Teile teilt
Ich habe versucht, eine Site zu erstellen, mit der die aktualisierten Informationen von Azure einfach angezeigt werden können
Ich habe versucht, es zu erweitern, damit die Datenbank mit der Analysesoftware von Wiire verwendet werden kann
Ich habe Gerüchte gehört, dass Malloc langsam ist und im Speicher gespeichert werden sollte, also habe ich es verglichen.
Ich habe eine Funktion erstellt, um zu überprüfen, ob der Webhook vorerst in Lambda empfangen wird
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
[Python] Verwendung der for-Anweisung. Eine Methode zum Extrahieren durch Angabe eines Bereichs oder von Bedingungen.
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
Lassen Sie es uns tun, indem Sie numpy teilen, ohne die for-Anweisung zu verwenden
Ich habe ein Programm erstellt, das die Fehlersuche in Sekunden löst
[Selen] Verwenden Sie die while-Anweisung, um wiederholt zur "nächsten Seite" zu wechseln.
Ein Timer (Ticker), der im Feld verwendet werden kann (kann überall verwendet werden)
Ich möchte eine Pipfile erstellen und im Docker wiedergeben
Lassen Sie uns dies tun, indem wir numpy multiplizieren, ohne die for-Anweisung zu verwenden
Ich habe den Befehl gegeben, einen farbenfrohen Kalender im Terminal anzuzeigen
Ich habe einen Tri-Tree geschrieben, der für die Implementierung von Hochgeschwindigkeitswörterbüchern in D-Sprache und Python verwendet werden kann
[Für Anfänger] Ich möchte den Index eines Elements erhalten, das einen bestimmten bedingten Ausdruck erfüllt
Ich habe versucht, ein System zu erstellen, um den Programmführer automatisch zu erfassen → ihn an einem Tag im Kalender zu registrieren
Lösung für das Problem, dass Strg + z in Powershell in Docker für Windows nicht verwendet werden kann (vorläufig)
Zur Zeit möchte ich mit FastAPI zeigen, wie man eine solche API in swagger verwendet
Erstellen Sie einen Bot, der die Anzahl der Personen, die für das neue Corona-Virus in Tokio positiv sind, an Slack sendet
Ich habe eine App für Ausländer erstellt, die Japan in Hackason besuchen, und einen Preis gewonnen, aber als ich mir das genau überlegte, war es nutzlos.