GOOGLE ADS

miércoles, 27 de abril de 2022

Manera pitónica de hacer que ambas diagonales pasen a través de una entrada de matriz (i, j)

¿Cuál es la forma Pythonic de obtener una lista de elementos diagonales en una matriz que pasa por la entrada (i,j)?

Por ejemplo, dada una matriz como:

[1 2 3 4 5]
[6 7 8 9 10]
[11 12 13 14 15]
[16 17 18 19 20]
[21 22 23 24 25]

y una entrada, por ejemplo, (1,3)(que representa el elemento 9) ¿cómo puedo hacer que los elementos de las diagonales pasen 9de forma pitónica? Básicamente, [3,9,15]y [5,9,13,17,21]ambos.


Solución del problema

Usando np.diagonalcon un poco de lógica de compensación.

import numpy as np
lst = np.array([[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25]])
i, j = 1, 3
major = np.diagonal(lst, offset=(j - i))
print(major)
array([ 3, 9, 15])
minor = np.diagonal(np.rot90(lst), offset=-lst.shape[1] + (j + i) + 1)
print(minor)
array([ 5, 9, 13, 17, 21])

Los índices iy json la fila y la columna. Al especificar el desplazamiento, numpysabe desde dónde comenzar a seleccionar elementos para la diagonal.

Para la diagonal mayor, desea comenzar a recopilar desde 3la primera fila. Por lo tanto, debe tomar el índice de columna actual y restarlo por el índice de fila actual para calcular el índice de columna correcto en la fila 0. De manera similar para la diagonal menor, donde la matriz se voltea (gira 90˚) y el proceso se repite.

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...