Ich versuche, eine Matrix-Transponierungsfunktion für Python zu erstellen, aber ich kann nicht scheinen, dass es funktioniert. Sag ich habe
theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
und ich möchte, dass meine Funktion erfüllt wird
newArray = [['a','d','g'],['b','e','h'],['c', 'f', 'i']]
Mit anderen Worten, wenn ich dieses 2D-Array als Spalten und Zeilen drucken würde, möchte ich, dass die Zeilen in Spalten und Spalten in Zeilen umgewandelt werden.
Ich habe das bisher gemacht, aber es funktioniert nicht
def matrixTranspose(anArray):
transposed = [None]*len(anArray[0])
for t in range(len(anArray)):
for tt in range(len(anArray[t])):
transposed[t] = [None]*len(anArray)
transposed[t][tt] = anArray[tt][t]
print transposed
python
list
multidimensional-array
Julio Diaz
quelle
quelle
izip
vonitertools
sparen können Speicher für große Arrays.[['a', 'b', 'g'], ['d', 'e', 'h'], ['c', 'f', 'i']]
statt[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
?map(list, zip(*theArray))
.zip
bereits ein Iterator zurückgegeben: docs.python.org/3.0/whatsnew/…Der Listengenerator erstellt ein neues 2D-Array mit Listenelementen anstelle von Tupeln.
quelle
list(map(list, zip(*theArray)))
Wenn Ihre Zeilen nicht gleich sind, können Sie auch Folgendes verwenden
map
:Bearbeiten: In Python 3 kann stattdessen die
map
geänderte Funktionalitätitertools.zip_longest
verwendet werden:Quelle: Was ist neu in Python 3.0?
quelle
Viel einfacher mit Numpy:
quelle
Das Problem mit Ihrem ursprünglichen Code war, dass Sie
transpose[t]
bei jedem Element und nicht nur einmal pro Zeile initialisiert haben :Dies funktioniert, obwohl es mehr pythonische Möglichkeiten gibt, um die gleichen Dinge zu erreichen, einschließlich der
zip
Anwendung von @ JF .quelle
Wenn Sie eine Liste mit Listen unterschiedlicher Länge haben, lesen Sie diesen großartigen Beitrag von ActiveState , um die Antwort von JF Sebastian zu vervollständigen . Zusamenfassend:
Verwenden Sie Folgendes, um eine Liste mit Listen unterschiedlicher Länge zu erstellen:
quelle
Die "beste" Antwort wurde bereits übermittelt, aber ich dachte, ich würde hinzufügen, dass Sie verschachtelte Listenverständnisse verwenden können, wie im Python-Tutorial gezeigt .
So können Sie ein transponiertes Array erhalten:
quelle
Dieser behält die rechteckige Form bei, so dass nachfolgende Transponierungen das richtige Ergebnis erzielen:
quelle
Sie können dies mit Listenverständnis wie folgt versuchen
matrix = [['a','b','c'],['d','e','f'],['g','h','i']] n = len(matrix) transpose = [[row[i] for row in matrix] for i in range(n)] print (transpose)
quelle
Wenn Sie eine Matrix wie A = np.array ([[1,2], [3,4]]) transponieren möchten, können Sie einfach AT verwenden, aber für einen Vektor wie a = [1,2], aT gibt keine Transponierte zurück! und Sie müssen a.reshape (-1, 1) wie unten verwenden
quelle
Sie können dies einfach mit Python-Verständnis tun.
quelle
quelle
quelle
quelle
quelle
quelle
`
`Diese Funktion gibt die Transponierte zurück
quelle
Python-Programm zur Transponierung der Matrix:
quelle