Numeric, NumPy oder NumArray?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Lebostein
User
Beiträge: 9
Registriert: Freitag 4. August 2006, 09:03

Hallo,

ich beschäftige mich erst seit ner Woche mit Python (arbeite mit dem FEM-Solver ABAQUS, dessen Entwicklungsumgebung auf Python basiert und der auch für das Postprocessing der FE-Rechnungen nützliche Python-Funktionen bereitstellt) und suche nun nach einem guten Package zum Multiplizeren von Matrizen, generieren von Determinanten usw.

Dabei bin auf die drei im Titel genannten Pakete gestoßen (http://sourceforge.net/project/showfile ... up_id=1369). Sind sie vergleichbar? Bauen sie aufeinander auf oder sind sie unabhängig voneinander entwickelt worden? Welches ist zu empfehlen? Gibt es Geschwindigkeitsunterschiede?

Vielleicht haben ja einige hier Erfahrung gesammelt.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

zuerst war da Numerical Python oder kurz Numeric (oder auch Numpy), dann gab es eine Spaltung der Community, weil einige Anforderungen hatten, die Numeric nicht erfüllte: numarray war geboren.
Jetzt gibt es numpy als Folge der Bemühung beide Strömungen wieder unter ein Dach zu bringen. Also wenn möglich numpy verwenden. Inzwischen ist auch 1.0b draußen und 1.0 wird bald folgen. Die Installation ist einfach (zumindest auf einer Linux-Kiste). Dazu gibt es scipy (von www.scipy.org), mit diversen zusätzlichen Modulen (z. B. Statistik, Integration von Differentialgleichungen, usw.), welches man gegen numpy kompilieren kann (man braucht ATLAS und LAPACK - für Windows wird es bald eine aktuelle binarie geben, die die Installation etwas einfacher macht).

Einige Anwendungen brauchen aber noch Numeric oder numarray (aber die sind auch dabei umzustellen. matplotlib kann man gegen alle drei array module kompilieren (sogar gleichzeitig).

Alle drei sind vergleichbar, haben aber leicht unterschiedliche APIs. numarray ist insbesondere für sehr große mehrdimensionale (>= 2D) Arrays geeignet.

Für alle drei Module gibt es ausreichende Documentation. Für numpy auch eine Mailingliste (für numarray ebenfalls, aber die wird wohl auf absehbare Zeit eingestellt).

Geschwindigkeit sollte kein Problem sein (Ausnahme ist wohl immer noch, daß numarray bei wirklich sehr großen arrays (nicht Fragen wo die Grenze liegt, ich weiß es nicht) besser abschneiden soll). Manchmal gibt es Benchmarks a la: "Matlab schneidet bei diesem Problem aber besser ab!" Dann wird dran gearbeitet und das Problem meist behoben. In der Richtung ist auch schon viel gemacht worden.

Fazit: Wenn nichts dagegen spricht (andere Anwendungen), nehme numpy und das aktuelle scipy. Dazu vielleicht noch matplotlib ;-).

Gruß,
Christian
Lebostein
User
Beiträge: 9
Registriert: Freitag 4. August 2006, 09:03

Danke für die Hilfe. Es scheint auch alles so zu funktionieren, wie es soll. Nur eine Sache bekomme ich nicht hin: Eine leere Matrix generieren. Für eine 8x3-Matrix mache ich es im Moment noch auf eine sehr umständliche Weise:

Code: Alles auswählen

P = array([[0.,0.,0.],[0.,0.,0.],[0.,0.,0.],[0.,0.,0.],[0.,0.,0.],[0.,0.,0.],[0.,0.,0.],[0.,0.,0.]], Float)
oder etwas lesbarer und kürzer:

Code: Alles auswählen

T = zeros(3, Float)
P = array([T,T,T,T,T,T,T,T])
Bei so wenigen Einträgen geht das ja noch, was aber wenn ich zum Beispiel eine 100x10-Matrix anlegen will...? Das muss doch einfacher gehen. Habt ihr einen Tipp?
BlackJack

Mit `zeros()` bist Du schon auf der richtigen Fährte:

Code: Alles auswählen

In [11]: numarray.zeros((3, 8), numarray.Float)
Out[11]:
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])
Antworten