2017-10-21 291 views
0

給定一個mxn矩陣和一個元素的索引,我如何使用純python(無numpy或任何矩陣包)來獲取包含該元素的兩個對角線?如何獲取矩陣中元素的兩個對角線?

例如:

1 2 3 4 
5 6 7 8 
9 10 11 12 
0 1 0 1 

鑑於元件(1,2),我能得到在主對角線:[2,7,12],和[4,7,10,0]。我已經看過this post,但我不介意纏繞矩陣。此外,該解決方案對我來說很難理解,所以我無法重新編寫它以適應我的需求。

+0

到底什麼是「黑客帝國」應該是在純Python? –

+0

一個多維數組 – AlanH

+0

給定一個任意元素的位置'mat [i] [j]',它所對應的對角線與'i'&'j'以固定的方式相關:即mat [i,j-1 ]'和'mat [i,j + 1]'是兩個候選位置(假設計算出的索引是有效的)。對於另一個對角線,例子是'mat [i-1,j]'和'mat [i + 1,j]'。你只需要將它們聚集在一起。 Python沒有內置的矩陣'get_diagonal()'函數。如果你不想包裝,那麼不要這樣做。 – martineau

回答

0

這裏有沒有你在純Python想要什麼東西™:

mat = [[ 1, 2, 3, 4], 
     [ 5, 6, 7, 8], 
     [ 9, 10, 11, 12], 
     [ 0, 1, 0, 1]] 

def get_diags(mat, i0, j0): 
    """ Return both diagonals that contain element mat[i0][j0]. """ 
    height, width = len(mat), len(mat[0]) 
    summ, diff = i0+j0, i0-j0 
    diag1, diag2 = [], [] 
    for i in range(height): 
     for j in range(width): 
      if i-j == diff: 
       diag1.append(mat[i][j]) 
      if i+j == summ: 
       diag2.append(mat[i][j]) 

    return diag1, diag2 

print(get_diags(mat, 1, 2)) # -> ([2, 7, 12], [4, 7, 10, 0])