2017-01-12 14 views
0

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

答えて

0

あなたの場合numpyがインストールされている場合は自由のための3210:

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

私はあらかじめ定義されていない – ANdr