Frage

Sind Teile NumPy und / oder SciPy programmiert in C / C ++?

Und wie der Aufwand für Aufruf C von Python vergleichen, um die Overhead Aufruf C von Java und / oder C #?

Ich frage mich nur, wenn Python eine bessere Option als Java oder C # für wissenschaftliche Anwendungen ist.

Wenn ich den Blick auf Schießereien , verliert Python mit großem Abstand. Aber ich denke, das ist, weil sie 3rd-Party-Bibliotheken nicht in dem Benchmarks verwenden.

War es hilfreich?

Lösung

  1. ich würde jede Benchmark Frage, die sich nicht um die Quelle für jede Implementierung nicht zeigen (oder habe ich etwas verpasst)? Es ist durchaus möglich, dass eine oder beide dieser Lösungen schlecht codiert sind, welche in einem unfairen Beurteilung eines oder beider Sprachleistung führen würde. [Bearbeiten] Hoppla, jetzt sehe ich die Quelle. Wie andere haben jedoch darauf hingewiesen, es ist nicht die NumPy / SciPy Bibliotheken so dass diese Benchmarks nicht helfen, werden Sie eine Entscheidung treffen.
  2. Ich glaube, dass die große Mehrheit der NumPy und SciPy in C geschrieben und in Python für einfache Bedienung gewickelt.
  3. Es hängt wahrscheinlich das, was Sie in einer dieser Sprachen, wie viel Aufwand es für eine bestimmte Anwendung.
  4. tun

ich verwendet habe, Python für Datenverarbeitung und -analyse für ein paar Jahre, so würde ich sagen, es ist sicher für den Zweck geeignet.

Was wollen Sie am Ende des Tages erreichen? Wenn Sie eine schnelle Art und Weise wollen lesbaren Code zu entwickeln, Python ist eine ausgezeichnete Wahl und sicherlich schnell genug für einen ersten Stich an, was auch immer es ist, Sie zu lösen versuchen.

Warum nicht ein Bash an die jeweils für eine kleine Teilmenge des Problems und Benchmark-Ergebnisse in Bezug auf die Entwicklungszeit und Laufzeit? Dann können Sie eine objektive Entscheidung treffen, basierend auf einige relevante Daten ... oder zumindest das ist, was ich tun würde: -)

Andere Tipps

Eine Menge davon wird in C oder Fortran geschrieben. Sie können die heißen Schleifen in C neu schreiben (oder eine der Unmenge Möglichkeiten nutzen Python zu beschleunigen, boost / Webart ist mein Favorit), aber ist es wirklich wichtig?

Ihre wissenschaftliche App wird einmal ausgeführt werden. Der Rest ist nur das Debuggen und Entwicklung, und diese können auf Python viel schneller sein.

Die meisten NumPy ist in C, aber ein großer Teil des C-Code ist „vorformulierten“, um alle schmutzigen Details der Python / C-Schnittstelle zu behandeln. Ich denke, das Verhältnis C vs. Python ist um 50:50 ATM für NumPy.

Ich bin nicht allzu vertraut mit vm-basierten Low-Level-Details, aber ich glaube, dass die Schnittstelle Kosten wegen der Beschränkungen des Jvm und die .clr setzen höher sein würden. Einer der Gründe, warum numpy ist oft schneller als vergleichbare Umgebungen ist die Speicherrepräsentation und wie Arrays gemeinsam genutzt werden / zwischen Funktionen übergeben. Während die meisten Umgebungen (Matlab und R als auch glaube ich) verwenden Copy-on-Write-Arrays zwischen Funktionen übergeben, NumPy Referenzen verwenden. Aber dabei in z.B. die JVM wäre schwer (wegen der Einschränkungen, wie Pointer, etc ...). Es ist machbar (ein früher Hafen von NumPy für Jython vorhanden), aber ich weiß nicht, wie sie dieses Problem lösen. Vielleicht C ++ / CLI wäre dies einfacher machen, aber ich habe null Erfahrung mit dieser Umgebung.

Es gibt einen besseren Vergleich hier (kein Maßstab, aber zeigt Wege von Python zu beschleunigen). NumPy wird meist in C geschrieben Der Hauptvorteil von Python ist, dass es eine Reihe von Möglichkeiten, ist sehr leicht Ihren Code mit C (ctypes, saufen, f2py), der sie / C ++ (boost.python, weben .inline, weave.blitz) / Fortran (f2py) - oder auch nur durch Typenannotationen zu Python hinzugefügt, so kann es zu C verarbeitet werden (cython). Ich glaube nicht, dass es viele Dinge vergleichsweise einfach für C # oder Java ist - zumindest, die so seemlessly vorbei numerische Arrays unterschiedlicher Typen behandeln (obwohl ich denke, Befürworter argumentieren, da sie sich weniger Bedarf ist nicht die Leistungseinbuße von Python zu).

Es kommt immer auf Ihre eigene Fähigkeit, die langue zu handhaben, so dass die Sprache in der Lage, schnell Code zu generieren. Aus meiner Erfahrung ist numpy mehrmals langsamer als gut .NET-Implementierungen. Und ich erwarte, dass JAVA schnell ähnlich. Deren Optimierung JIT-Compiler haben über die Jahre deutlich verbessert und produzieren sehr effizient Anweisungen.

numpy auf der anderen Seite kommt mit einer Syntax weicht ist leichter für diejenigen zu verwenden, die auf Skriptsprachen abgestimmt sind. Aber wenn es um die Anwendungsentwicklung kommt, drehen Sie diese Vorteile oft Hindernisse, und Sie werden für Typsicherheit und Enterprise-IDEs sehnen. Auch die syntaktische Lücke schließt bereits mit C #. Eine wachsende Zahl von wissenschaftlichen Bibliotheken existieren für Java und . NET .Personally ich in Richtung C # neigen, bacause es besser Syntax für mehrdimensionale Arrays bietet und irgendwie fühlt mehr modern'. Aber natürlich, das ist nur meine persönliche Erfahrung.

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