/ / diagonali parallele alla prima diagonale di una matrice quadrata - python-3.x

diagonali parallele alla prima diagonale in una matrice quadrata - python-3.x

Sto cercando di ottenere tutte le diagonali che sono parallele alla prima diagonale di una matrice quadrata, usando python.

    matrix = [[1,2,3,4],
[5,6,7,8],
[9,0,1,2],
[3,4,5,6]]

for i in range(len(matrix)):
for j in range(len(matrix)):
diagonal = []
if i == j + 1 :
diagonal.append(mat[i][j])
print(diagonal, end=" ")

Con la mia prima diagonale:

    [1][6][1][6]

E l'output è:

    [5] [0] [5]

Ma sto cercando entrambi:

    [5] [0] [5] and
[9] [4]

risposte:

0 per risposta № 1

se hai numpy installato si ottiene diagonali (con offset) gratuito:

import numpy as np

matrix = np.array( [[1,2,3,4],
[5,6,7,8],
[9,0,1,2],
[3,4,5,6]])

print(matrix.diagonal())          # -> [1 6 1 6]
print(matrix.diagonal(offset=-1)) # -> [5 0 5]
print(matrix.diagonal(offset=-2)) # -> [9 4]

questo è un modo per farlo a mano:

def diagonal(matrix, offset=0):
ret = []
l = len(matrix)
for i, row in enumerate(matrix):
j = i+offset
if j < 0:
continue
if j >= l:
break
ret.append(row[j])
return ret

print(diagonal(matrix))            # -> [1, 6, 1, 6]
print(diagonal(matrix, offset=-1)) # -> [5, 0, 5]
print(diagonal(matrix, offset=-2)) # -> [9, 4]

o una versione più compatta ed efficiente che genera la diagonale con una lista di comprensione:

def diagonal(matrix, offset=0):
dim = len(matrix)
return [matrix[i][j] for i, j in
zip(range(-offset if offset < 0 else 0, dim),
range(offset if offset > 0 else 0, dim))]