/ /正方行列の最初の対角に平行な対角線 - python-3.x

正方行列の最初の対角に平行な対角線 - python-3.x

私は、正方行列の最初の対角に平行なすべての対角線を、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=" ")

私の最初の対角線:

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

出力は次のとおりです。

    [5] [0] [5]

しかし、私は彼らの両方を探しています:

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

回答:

回答№1は0

あなたが持っている場合 numpy インストールされている 対角線(オフセット付き) 無料で:

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]

これは手でこれを行う方法です:

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]

リストの理解度を使って対角を生成するよりコンパクトで効率的なバージョン:

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))]