Matrice de Transposition en Python
Je suis en train de créer une matrice en fonction de la transposition de python, mais je n'arrive pas à le faire fonctionner.
Dire que j'ai
theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
et je veux que ma fonction à venir avec
newArray = [['a','d','g'],['b','e','h'],['c', 'f', 'i']]
Donc, en d'autres mots, si je devais imprimer ce tableau 2D comme les colonnes et les lignes, je voudrais que les lignes de tourner dans des colonnes et des colonnes en lignes.
J'ai fait jusqu'à présent, mais il ne fonctionne pas
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
InformationsquelleAutor Julio Diaz | 2011-02-08
Vous devez vous connecter pour publier un commentaire.
Python 2:
Python 3:
izip
deitertools
pouvez économiser de la mémoire pour de grands tableaux.[['a', 'b', 'g'], ['d', 'e', 'h'], ['c', 'f', 'i']]
au lieu de[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
?la liste générateur crée un nouveau tableau 2d avec des éléments de la liste à la place de n-uplets.
list(map(list, zip(*theArray)))
Si vos lignes ne sont pas égaux vous pouvez également utiliser
map
:Edit: En Python 3 la fonctionnalité de
map
changé,itertools.zip_longest
peut être utilisée à la place:Source: Ce qui est Nouveau En Python 3.0
lambda *x:x
fonctionnera à la place deNone
Beaucoup plus facile avec numpy:
Le problème avec votre code d'origine a été initialisées
transpose[t]
à chaque élément, plutôt qu'une seule fois par ligne:Cela fonctionne, mais il y a plus de Pythonic façons d'accomplir les mêmes choses, y compris @J. F.
zip
application.Pour compléter J. F. Sebastian de la réponse, si vous avez une liste de listes de longueurs différentes, découvrez ce grand poste de ActiveState. En bref:
Pour gérer des listes de listes de longueurs différentes, utilisation:
La "meilleure" réponse a déjà été soumise, mais j'ai pensé que je voudrais ajouter que vous pouvez imbriquer interprétations de la liste, comme on le voit dans le Tutoriel Python.
Ici est de savoir comment vous pourriez obtenir un tableau transposé:
Ce une volonté de préserver forme rectangulaire, de sorte que par la suite, transpose obtenir le résultat:
Si vous souhaitez transposer une matrice A = np.tableau([[1,2],[3,4]]), ensuite, vous pouvez simplement utiliser A. T, mais pour un vecteur comme a = [1,2], une.T ne retourne pas de transposer! et vous avez besoin d'utiliser une.remodeler(-1, 1), comme ci-dessous
`
`Cette fonction permet de renvoyer la transposition de
Programme en Python pour transposer la matrice: