J'essaie de créer une fonction de transposition de matrice pour python mais je n'arrive pas à la faire fonctionner. Dis que j'ai
theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
et je veux que ma fonction vienne avec
newArray = [['a','d','g'],['b','e','h'],['c', 'f', 'i']]
Donc, en d'autres termes, si je devais imprimer ce tableau 2D sous forme de colonnes et de lignes, je voudrais que les lignes se transforment en colonnes et les colonnes en lignes.
J'ai fait ça jusqu'ici mais ça ne marche 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
python
list
multidimensional-array
Julio Diaz
la source
la source
izip
fromitertools
peut économiser de la mémoire pour les grands tableaux.[['a', 'b', 'g'], ['d', 'e', 'h'], ['c', 'f', 'i']]
au lieu de[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
?map(list, zip(*theArray))
.zip
renvoie déjà un itérateur: docs.python.org/3.0/whatsnew/…le générateur de liste crée un nouveau tableau 2d avec des éléments de liste au lieu de tuples.
la source
list(map(list, zip(*theArray)))
Si vos lignes ne sont pas égales, vous pouvez également utiliser
map
:Edit: Dans Python 3, la fonctionnalité de
map
changéitertools.zip_longest
peut être utilisée à la place:Source: Quoi de neuf dans Python 3.0
la source
Beaucoup plus facile avec numpy:
la source
Le problème avec votre code d'origine était que vous avez initialisé
transpose[t]
à chaque élément, plutôt qu'une seule fois par ligne:Cela fonctionne, bien qu'il y ait plus de façons pythoniques d'accomplir les mêmes choses, y compris l'
zip
application de @ JF .la source
Pour compléter la réponse de JF Sebastian, si vous avez une liste de listes de différentes longueurs, consultez cet excellent article d'ActiveState . En bref:
Pour gérer une liste de listes de différentes longueurs, utilisez:
la source
La "meilleure" réponse a déjà été soumise, mais j'ai pensé ajouter que vous pouvez utiliser des compréhensions de listes imbriquées, comme vu dans le didacticiel Python .
Voici comment vous pouvez obtenir un tableau transposé:
la source
Celui-ci conservera la forme rectangulaire, de sorte que les transpositions ultérieures obtiendront le bon résultat:
la source
vous pouvez essayer ceci avec la compréhension de liste comme suit
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)
la source
Si vous voulez transposer une matrice comme A = np.array ([[1,2], [3,4]]), alors vous pouvez simplement utiliser AT, mais pour un vecteur comme a = [1,2], aT ne retourne pas une transposition! et vous devez utiliser a.reshape (-1, 1), comme ci-dessous
la source
Vous pouvez le faire simplement en utilisant la compréhension python.
la source
la source
la source
la source
la source
la source
»
`Cette fonction retournera la transposition
la source
Programme Python pour transposer la matrice:
la source