Transponer una matriz en Python

Vaibhav Vaibhav 30 enero 2023
  1. Transponer una matriz en Python
  2. Transponer una matriz en Python usando el módulo NumPy
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í.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

Artículo relacionado - Python Matrix