Come trasporre un array in Python
Siccome numPy è nei topic, presumo che il suggerimento di Leo Mauro di usare numpy.array.transpose() sia accettabile. Tuttavia, supponiamo che non abbiate numPy installato, o che non vogliate l'overhead di importare funzioni da esso, ma che vogliate comunque fare matematica con matrici/vettori in python nativo.
Invece di avere un tipo di dati personalizzato per rappresentare i nostri vettori/matrici, useremo liste di liste. Così un vettore riga sarà come [[1,2,3,4]], un vettore colonna sarà come [[1],[2],[3],[4]], e una matrice 3x3 sarà come [[1,2,3],[4,5,6],[7,8,9]].
Se facciamo questa scelta, allora possiamo definire la trasposizione della matrice usando funzioni built-in così:
- def transpose(a):
- return list(map(list,zip(*a))
Il vero lavoro viene fatto spacchettando la lista di liste e poi zippando insieme gli elementi agli indici corrispondenti in tuple, il che realizza la trasposizione. Then we map list over this list of tuples to turn the tuples into lists, then extract all the lists from the map object into a new list.
By the by, you can then implement matrix multiplication as:
- def matrixmult(a,b):
- return [[sum(x*y for x,y in zip(i,j)) for j in transpose(b)] for i in a]
Still totally native built-in Python.