6 Stimmen

Matrizen in Python

Gestern hatte ich Bedarf an einem Matrixtyp in Python.

Eine triviale Antwort auf dieses Bedürfnis wäre offenbar die Verwendung von numpy.matrix() , aber das zusätzliche Problem, das ich habe, ist, dass ich möchte, dass eine Matrix beliebige Werte mit gemischten Typen, ähnlich wie eine Liste zu speichern. numpy.matrix führt dies nicht durch. Ein Beispiel ist

>>> numpy.matrix([[1,2,3],[4,"5",6]])
matrix([['1', '2', '3'],
        ['4', '5', '6']], 
       dtype='|S4')
>>> numpy.matrix([[1,2,3],[4,5,6]])
matrix([[1, 2, 3],
        [4, 5, 6]])

Wie Sie sehen können, ist die numpy.matrix müssen inhaltlich homogen sein. Wenn ein String-Wert in meiner Initialisierung vorhanden ist, wird jeder Wert implizit als String gespeichert. Dies wird auch durch den Zugriff auf die Einzelwerte bestätigt

>>> numpy.matrix([[1,2,3],[4,"5",6]])[1,1]
'5'
>>> numpy.matrix([[1,2,3],[4,"5",6]])[1,2]
'6'

Jetzt kann der Python-Listentyp stattdessen auch gemischte Typen akzeptieren. Man kann eine Liste haben, die eine ganze Zahl und eine Zeichenkette enthält, wobei beide ihren Typ beibehalten. Was ich bräuchte, ist etwas, das einer Liste ähnelt, aber mit einem matrixähnlichen Verhalten arbeitet.

Daher musste ich einen eigenen Typus implementieren. Für die interne Implementierung hatte ich zwei Möglichkeiten: Listen, die Listen enthalten, und Wörterbücher. Beide Lösungen haben Unzulänglichkeiten:

  • Liste von Listen erfordern eine sorgfältige Synchronisierung der Größen der verschiedenen Listen. Das Vertauschen von zwei Zeilen ist einfach. Das Vertauschen von zwei Spalten ist weniger einfach. Auch das Entfernen einer Zeile ist einfach.
  • Dictionaries (mit einem Tupel als Schlüssel) sind etwas besser, aber Sie müssen die Grenzen Ihres Schlüssels definieren (z. B. können Sie kein Element 5,5 einfügen, wenn Ihre Matrix 3x3 ist), und sie sind komplexer zu verwenden, um Spalten oder Zeilen einzufügen, zu entfernen oder zu vertauschen.

Edit: Klarstellung. Der konkrete Grund, warum ich diese Funktionalität benötige, ist, dass ich CSV-Dateien lese. Sobald ich die Werte aus einer CSV-Datei gesammelt habe (Werte, die Strings, Integer, Floats sein können), möchte ich Swapping, Entfernen, Einfügen und andere Operationen durchführen. Aus diesem Grund benötige ich eine "Matrixliste".

Meine Neugierde ist groß:

  • wissen Sie, ob ein Python-Datentyp, die diesen Dienst bereits existiert (vielleicht in einer "nicht-Batterie enthalten" Bibliothek da draußen)?
  • warum ist dieser Datentyp nicht in der Standardbibliothek enthalten? Zu geringes Interesse vielleicht?
  • Wie hätten Sie dieses Problem gelöst? Wörterbuch, Liste oder eine andere clevere Lösung?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X