¿Cómo funciona la transposición de esta matriz bidimensional?
Entonces, he pasado demasiado tiempo intentando transponer una matriz bidimensional (invertir la cantidad de columnas y filas de una matriz). No podemos usar numpy ni zip
y encontramos un fragmento útil que funciona.
x = [[1, 2, 3], [4, 5, 6]]
new_x = [[x[j][i] for j in range(len(x))] for i in range(len(x[0]))][::-1]
He estado usando un bucle anidado para esto:
for i in range(len(a)):
for j in range(len(a[0])):
Pregunta 1: ¿Puedes por favor explicar cómo las funciones anteriores funcionan de la misma manera que mi código pero están escritas de manera diferente (cuáles son exactamente los equivalentes y cómo se acorta de esta manera)?
Pregunta 2: ¿Qué exactamente transpone la matriz? Estoy 99% seguro de que es el [::-1]
y sé que -1 significa que retrocedemos un paso en cada bucle, pero no puedo hacer la conexión de cómo básicamente rota la matriz.
Básicamente, por favor, explícalo como si tuvieras 5 años y un pequeño curso intensivo sería muy apreciado.
davy.ai
El código
new_x = [[x[j][i] for j in range(len(x))] for i in range(len(x[0]))][::-1]
crea una nueva listanew_x
iterando primero a través de las columnas de la lista originalx
y luego a través de las filas. Utiliza comprensión de listas para lograr esto de una manera más corta que usando bucles for anidados. La comprensión de lista exterior[...]
crea una nueva lista a partir de la comprensión de lista interior... for j in range(len(x))]
, la cual crea una nueva lista de los elementos en cada columnax[j]
para cada índice de columnaj
en el rangorange(len(x))
. El[i]
al final significa que esta nueva lista está indexada por el índice de filai
, por lo que obtenemos una lista de elementos de filax[j][i]
para cada índice de filai
. El[::-1]
al final invierte el orden de estas filas, de modo que obtenemos la matriz transpuesta.Sí, el
[::-1]
es lo que transpone la matriz. Invierte el orden de las filas en la nueva listanew_x
que creamos en el paso anterior. Esto tiene el efecto de intercambiar los roles de filas y columnas, de modo que obtenemos la matriz transpuesta como resultado. La sintaxis[::-1]
simplemente significa que estamos usando una sección que comienza en el final de la lista (-1
) y avanza hacia atrás (-1
) un elemento a la vez. Esto efectivamente invierte el orden de la lista.