繁体   English   中英

NXN矩阵的所有对角元素,而在python中不使用numpy

[英]All Diagonal elements of a NXN matrix without using numpy in python

尝试不使用numpy来获取NXN矩阵的所有对角线元素,

这与在Python中不使用numpy的情况下获取对角线不同

请不要将其标记为重复项。

这是我的代码段,使用了两次迭代,它将打印从(0,0)到(n,n)的所有对角线元素。 有人可以帮助我改善迭代过程或任何递归方法吗?

#!/usr/bin/python 

matrix = [[1,2,3,4], 
          [2,3,4,5], 
          [3,4,5,6], 
          [4,5,6,7]] 

def get_matrix_diagonal(m): 
    col = len(m) 
    result = list() 
    row = 0 
    for c in range(col): 
        position = list() 
        position.append([row,c]) 
        if c > 0: 
            i = c 
            while i > 0: 
                x = i - 1 
                y = c - i + 1 
                position.append([y,x]) 
                i -= 1 
        result.append(position) 
    row = row + 1 
    cc = c 
    for i in range(row,col): 
        position = list() 
        y = i 
        x = c 
        position.append([y,x]) 
        j = x - y 
        while j > 0: 
            y = c - j + 1 
            x = cc - y + 1 
            position.append([y,x]) 
            j -= 1 
        cc += 1
        result.append(position)
    return result

for ls in get_matrix_diagonal(matrix):
    for co in ls:
        x,y = co[0],co[1],
        print matrix[x][y],
    print

输出:

1
2 2
3 3 3
4 4 4 4
5 5 5
6 6
7
>>> matrix = [[1,2,3,4], 
...           [2,3,4,5], 
...           [3,4,5,6], 
...           [4,5,6,7]] 
>>> N = 4
>>> [[matrix[y-x][x] for x in range(N) if 0<=y-x<N] for y in range(2*N-1)]
[[1], [2, 2], [3, 3, 3], [4, 4, 4, 4], [5, 5, 5], [6, 6], [7]]

这里假设您的矩阵是正方形的递归方法:

def diagonals(m):
    if len(m) == 1: return m
    d = [[]] + diagonals([r[1:] for r in m[:-1]]) + [[]]
    r = [r[0] for r in m] + m[-1][1:]
    return [[r] + d for r, d in zip(r,d)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM