Transponer una matriz en Python
Las matrices se pueden representar mediante listas multidimensionales en Python. Una vez expresados, podemos realizar todas las operaciones que podemos realizar sobre matrices en teoría matemática, como multiplicación, suma y resta de matrices.
Este artículo hablará sobre una de esas operaciones. Aprenderemos cómo transponer una matriz usando Python con la ayuda de algunos ejemplos relevantes.
Transponer una matriz en Python
Para transponer una matriz en Python, podemos escribir una función stub simple y usar bucles for
para transponer una matriz de entrada.
def transpose(matrix):
if matrix == None or len(matrix) == 0:
return []
result = [[None for i in range(len(matrix))] for j in range(len(matrix[0]))]
for i in range(len(matrix[0])):
for j in range(len(matrix)):
result[i][j] = matrix[j][i]
return result
def print_matrix(matrix):
for row in matrix:
print(*row)
array = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
result = transpose(array)
print_matrix(result)
Producción :
1 6 11
2 7 12
3 8 13
4 9 14
5 10 15
La complejidad temporal y espacial del método anterior son O(mn)
, donde m
es el número de filas en la matriz de entrada y n
es el número de columnas en la matriz de entrada.
La complejidad del tiempo es O(mn)
porque estamos iterando sobre toda la matriz de entrada. La complejidad del espacio es O(mn)
porque creamos una copia de la matriz de entrada y la almacenamos en una variable separada.
La función stub anterior crea primero una matriz temporal de tamaño n x m
con valores None
si la forma de la matriz de entrada es m x n
. Aquí, m
es el número de filas en la matriz de entrada y n
es el número de columnas en la matriz de entrada.
A continuación, itera sobre la matriz de entrada utilizando dos bucles for
anidados. Dentro de los dos bucles for
, los valores None
se reemplazan con los valores reales de la matriz de entrada (result[i][j] = matrix[j][i]
). Por último, la matriz temporal se devuelve como salida.
En lugar de utilizar dos bucles for
anidados para llenar la matriz temporal, también podemos escribir la lógica de transposición en una sola línea para ahorrar espacio.
def transpose(matrix):
if matrix == None or len(matrix) == 0:
return []
return [[matrix[i][j] for i in range(len(matrix))] for j in range(len(matrix[0]))]
def print_matrix(matrix):
for row in matrix:
print(*row)
array = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
result = transpose(array)
print_matrix(result)
Producción :
1 6 11
2 7 12
3 8 13
4 9 14
5 10 15
La complejidad temporal y espacial de esta solución es también la misma que la de la solución anterior, O(mn)
.
Transponer una matriz en Python usando el módulo NumPy
El NumPy
es un paquete de Python rico en utilidades para jugar con grandes matrices y arreglos multidimensionales y realizar operaciones matemáticas sencillas y complejas sobre ellos. Estas utilidades no solo son dinámicas para las entradas, sino también altamente optimizadas y rápidas.
Usando el módulo NumPy
en Python, podemos transponer una matriz de dos formas. La primera es usando el atributo T
de una matriz NumPy
, y la segunda es llamando al método transpose()
de una matriz NumPy
.
Consulte el siguiente código de Python para comprender cómo utilizar los dos métodos mencionados.
Nota: Para usar estas utilidades, primero tenemos que convertir la matriz de entrada en una matriz NumPy
usando el método numpy.array()
. Para obtener más información sobre este método, haga clic aquí.
import numpy as np
array = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
array = np.array(array)
print(array.T) # First Method
print(array.transpose()) # Second Method
Producción :
[[ 1 6 11]
[ 2 7 12]
[ 3 8 13]
[ 4 9 14]
[ 5 10 15]]
[[ 1 6 11]
[ 2 7 12]
[ 3 8 13]
[ 4 9 14]
[ 5 10 15]]
El transpose()
acepta un argumento axes
que se puede utilizar para realizar algunas modificaciones de transposición interesantes sobre una matriz NumPy
. Para obtener más información sobre este método, haga clic aquí.