2017-10-21 100 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]) 
相关问题