Estoy tratando de crear una función de transposición de matriz para Python, pero parece que no puedo hacer que funcione. Di que tengo
theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
y quiero que mi función surja
newArray = [['a','d','g'],['b','e','h'],['c', 'f', 'i']]
En otras palabras, si imprimiera esta matriz 2D como columnas y filas, me gustaría que las filas se convirtieran en columnas y columnas en filas.
Hice esto hasta ahora pero no funciona
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
fuente
fuente
izip
desdeitertools
puede ahorrar memoria para matrices grandes.[['a', 'b', 'g'], ['d', 'e', 'h'], ['c', 'f', 'i']]
lugar de[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
?map(list, zip(*theArray))
.zip
ya devuelve un iterador: docs.python.org/3.0/whatsnew/…El generador de listas crea una nueva matriz 2D con elementos de lista en lugar de tuplas.
fuente
list(map(list, zip(*theArray)))
Si sus filas no son iguales, también puede usar
map
:Editar: en Python 3, la funcionalidad de los
map
cambiositertools.zip_longest
se puede utilizar en su lugar:Fuente: Novedades de Python 3.0
fuente
Mucho más fácil con numpy:
fuente
El problema con su código original fue que se inicializó
transpose[t]
en cada elemento, en lugar de solo una vez por fila:Esto funciona, aunque hay más formas pitónicas de lograr las mismas cosas, incluida la
zip
aplicación de @ JF .fuente
Para completar la respuesta de JF Sebastian, si tienes una lista de listas con diferentes longitudes, mira esta gran publicación de ActiveState . En breve:
Para manejar la lista de listas con diferentes longitudes, use:
fuente
La "mejor" respuesta ya se ha enviado, pero pensé que agregaría que puede usar las comprensiones de listas anidadas, como se ve en el Tutorial de Python .
Así es como podría obtener una matriz transpuesta:
fuente
Éste conservará la forma rectangular, para que las transposiciones posteriores obtengan el resultado correcto:
fuente
puedes probar esto con una lista de comprensión como la siguiente
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)
fuente
Si desea transponer una matriz como A = np.array ([[1,2], [3,4]]), simplemente puede usar AT, pero para un vector como a = [1,2], aT no devuelve una transposición! y necesita usar a.reshape (-1, 1), como se muestra a continuación
fuente
Puedes hacerlo simplemente usando la comprensión de Python.
fuente
fuente
fuente
fuente
fuente
fuente
``
`Esta función devolverá la transposición
fuente
Programa Python para transponer matriz:
fuente