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 № 1se 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))]