es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , , ,

Answer

  1. Avatar for davy.ai
    1. 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 lista new_x iterando primero a través de las columnas de la lista original x 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 columna x[j] para cada índice de columna j en el rango range(len(x)). El [i] al final significa que esta nueva lista está indexada por el índice de fila i, por lo que obtenemos una lista de elementos de fila x[j][i] para cada índice de fila i. El [::-1] al final invierte el orden de estas filas, de modo que obtenemos la matriz transpuesta.

    2. Sí, el [::-1] es lo que transpone la matriz. Invierte el orden de las filas en la nueva lista new_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.

Comments are closed.