Frage

Ich habe mit dem Schreiben von CFFI-Modulen in Python gespielt, und ihre Geschwindigkeit macht mich fragt, ob ich Standard Python richtig bin.Es macht mich, um mich vollständig umschalten zu können!Wahrschaftlich gibt es einige großartige Python-Bibliotheken, die ich in c nie wiederholen konnte, also ist dies hypothetischer als alles wirklich.

In diesem Beispiel wird die Summenfunktion in Python angezeigt, die mit einem NUMPY-Array verwendet wird und wie langsam er im Vergleich zu einer C-Funktion ist.Gibt es eine schnellere pythonische Art, die Summe eines NUMPY-Arrays zu berechnen?

generasacodicetagpre.

Nur um die Funktionsarbeiten anzuzeigen:

generasacodicetagpre.

Wenn ich jetzt diese einfache Funktion time, finde ich, dass NUMPY wirklich langsam ist! Verwende ich numpy auf der richtigen Weise?Gibt es einen schnelleren Weg, um die Summe in Python zu berechnen?

generasacodicetagpre.

mal:

generasacodicetagpre.

War es hilfreich?

Lösung

numpy ist aus zwei Gründen langsamer als c: der Python-Overhead (wahrscheinlich ähnlich wie CFFI) und Allgemeinheit. NUMPY ist so konzipiert, dass sie mit Arrays von willkürlichen Abmessungen in einem Bündel unterschiedlicher Datentypen umgehen. Ihr Beispiel mit CFFI wurde für ein 2D-Array von Floats gemacht. Die Kosten schrieb mehrere Zeilen des Codes vs. .sum(), 6 Zeichen, um weniger als 5 Mikrosekunden zu sparen. (Aber natürlich wusste Sie das schon). Ich möchte nur betonen, dass die CPU-Zeit billig ist, viel günstiger als Entwicklerzeit.

Jetzt, wenn Sie sich an NUMPY anhalten möchten, und Sie möchten eine bessere Leistung erhalten, ist Ihre beste Option, um Engpässe . Sie liefern ein paar Funktionen, die für 1- und 2D-Arrays von Float-Arrays optimiert sind, und doppelt sich, und sie brennen schnell. In Ihrem Fall, 16-mal schneller, der die Ausführungszeit in 0,35 oder etwa doppelt so schnell wie CFFI eingibt.

Für andere Funktionen, die Engpässe nicht hat, können Sie Zython verwenden. Es hilft Ihnen, C-Code mit einer pythonischen Syntax zu schreiben. Oder, wenn Sie werden, umgewandeln Sie progressiv Python in c um, bis Sie mit der Geschwindigkeit zufrieden sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top