Ich habe ein kleines Java-Problem, das ich in Python übersetzen möchte. Dazu brauche ich ein mehrdimensionales Array. In Java sieht es so aus:
%Vor%Weitere Werte werden bei Schleifen erzeugt und in das Array geschrieben.
Wie instanziiere ich das Array?
PS: Es gibt keine Matrixmultiplikation ...
Sie können es mit verschachtelten Listen erstellen:
%Vor%Wenn es dynamisch sein muss, ist es komplizierter, warum schreibst du nicht selbst eine kleine Klasse?
%Vor%Dies kann wie folgt verwendet werden:
%Vor%Ich bin mir sicher, dass man es viel effizienter umsetzen könnte. :)
Wenn Sie mehrdimensionale Arrays benötigen, können Sie entweder ein Array erstellen und den Offset berechnen, oder Sie verwenden Arrays in Arrays in Arrays, was für den Speicher ziemlich schlecht sein kann. (Könnte aber schneller sein ...) Ich habe die erste Idee so umgesetzt:
%Vor%Kann wie folgt verwendet werden:
%Vor%Wenn Sie sich auf die Python-Standardbibliothek beschränken, ist eine Liste von Listen das nächstliegende Konstrukt:
%Vor% ergibt ein 2d-ähnliches Array. Auf die Zeilen kann als arr[i]
für i
in {0,..,len(arr}
zugegriffen werden, der Zugriff auf Spalten ist jedoch schwierig.
Wenn Sie eine Bibliotheksabhängigkeit hinzufügen möchten, ist das Paket NumPy genau das, was Sie wirklich wollen. Sie können ein Array fester Länge aus einer Liste von Listen erstellen, indem Sie Folgendes verwenden:
%Vor% Der Spaltenzugriff ist derselbe wie für die Listenliste, aber der Spaltenzugriff ist einfach: arr[:,i]
für i
in {0,..,arr.shape[1]}
(die Anzahl der Spalten).
Tatsächlich können NumPy-Arrays n-dimensional sein.
Leere Arrays können mit
erstellt werden %Vor% wobei shape
ein Tupel der Größe in jeder Dimension ist; shape=(1,3,2)
gibt ein 3-dimensionales Array mit der Größe 1 in der ersten Dimension, Größe 3 in der zweiten Dimension und 2 in der dritten Dimension an.
Wenn Sie Objekte in einem NumPy-Array speichern möchten, können Sie das auch tun:
%Vor%Weitere Informationen zum NumPy-Projekt finden Sie auf der NumPy-Startseite .
Um ein Standard-Python-Array von Arrays beliebiger Größe zu erstellen:
%Vor%Es wird so zugegriffen:
%Vor%Ein kleiner Python, der erwähnenswert ist: Es ist verlockend, einfach
einzugeben %Vor%, aber das kopiert das selbe Spaltenarray in jede Zeile, was zu unerwünschtem Verhalten führt. Nämlich:
%Vor%Sehen Sie sich numpy
anHier ist ein Code-Snippet für dich
%Vor%Ich glaube nicht, dass Sie eine wissenschaftliche Anwendung implementieren müssen, um die Verwendung von numpy zu rechtfertigen. Es ist schneller und flexibler und Sie können so ziemlich alles speichern. Angesichts der Tatsache, dass ich denke, es ist wahrscheinlich besser zu versuchen und rechtfertigen nicht mit ihm. Es gibt legitime Gründe, aber es fügt viel hinzu und kostet sehr wenig, also verdient es Betrachtung.
P.S. Sind Ihre Array-Längen richtig? Es sieht wie eine ziemlich eigenartig geformte Matrix aus ...
Mehrdimensionale Arrays sind ein wenig trübe. Es gibt nur wenige Gründe, sie zu verwenden, und viele Gründe, zweimal darüber nachzudenken und etwas anderes zu verwenden, das besser widerspiegelt, was Sie tun. [Hinweis. Deine Frage war zu wenig Kontext ;-)]
Wenn Sie Matrixmathematik verwenden, verwenden Sie numpy
.
Allerdings haben einige Leute mit Sprachen gearbeitet, die sie dazu zwingen, mehrdimensionale Arrays zu verwenden, weil sie alles haben, was sie haben. Wenn Sie so alt sind wie ich (ich habe in den 70er Jahren angefangen zu programmieren), dann erinnern Sie sich vielleicht an die Tage, an denen mehrdimensionale Arrays die einzige Datenstruktur waren, die Sie hatten. Oder Ihre Erfahrung hat Sie möglicherweise auf Sprachen beschränkt, in denen Sie Ihr Problem in mehrdimensionale Arrays verwandeln mussten.
Angenommen, Sie haben eine Sammlung n 3D-Punkte. Jeder Punkt hat einen x-, y-, z- und Zeitwert. Ist das ein n x 4 Array? Oder ein 4 * n Array? Nicht wirklich.
Da jeder Punkt 4 feste Werte hat, ist dies genauer eine Liste von Tupeln.
%Vor%Besser noch, wir könnten dies als eine Liste von Objekten darstellen.
%Vor%Wenn Sie sparsame Arrays verwenden, können Sie ein dict verwenden, um Ihre Werte zu speichern. Pythons Diktate erlauben es, Tupel als Schlüssel zu verwenden, so dass Sie Elementen des "Sparse-Arrays" (was hier wirklich ein Diktat ist) zuweisen und darauf zugreifen können:
%Vor%Wahrscheinlich nicht relevant für Sie, aber wenn Sie ernsthafte Matrix-Arbeit tun, sehen Sie numpy
Für numerische Daten Numpy Arrays :
%Vor%Für allgemeine Daten (z. B. Strings) können Sie eine Liste mit Listen, Tupellisten, ...
verwenden %Vor%Hier können Sie schnell eine verschachtelte 3-dimensionale Liste erstellen, die mit Nullen initialisiert wurde:
%Vor%Dies ist eine Liste von Listen, die etwas flexibler als ein Array sind. Sie können Folgendes tun:
%Vor%um eine ganze Zeile im Array zu ersetzen, oder sie sogar so zu missbrauchen:
%Vor%Aber wenn Sie Leistung brauchen, dann stimme ich zu, dass numpy der Weg ist.
Achtet auch auf:
%Vor% Wenn Sie a[0][0][0]=7
auf dem Objekt oben versuchen, werden Sie sehen, was damit nicht stimmt.
Eine andere Möglichkeit ist ein Wörterbuch:
%Vor%Sie müssen den oberen & amp; untere Grenzen auch.
Ich bin gerade auf ein ähnliches Bedürfnis gestoßen und habe folgendes geschrieben:
%Vor%Ich schaue nicht auf Geschwindigkeit, nur auf Funktionalität;)
Ich möchte eine Matrix mit N Dimensionen erstellen und initialisieren mit 0 (eine elem_count Anzahl der Elemente in jeder Dimension).
Hoffe, es hilft jemandem
Einfach, wenn Sie numpy verwenden:
%Vor%'Einsen' können durch 'Nullen' ersetzt werden