非方形矩阵中的对角线 - 蟒蛇

时间:2014-12-31 19:23:59

标签: python matrix

在之前的问题中,我找到了一种从sqare矩阵中获取所有对角线的方法。这是我的代码:

diags=[[s[y-x][x] for x in range(n) if 0<=y-x<n] for y in range(2*n-1)] 

例如,我有这个矩阵:

m=[[V,A,T],[D,I,S],[O,I,M],[F,U,A]]

这是我想要的输出:

[[V],[D,A],[O,I,T],[F,I,S],[U,M],[A]]

我已经知道如何在正向和反向方向上获得对角线 问题是此代码仅适用于sqare矩阵,但现在我需要在非方阵中找到所有对角线。
我认为问题在于这部分代码:

for y in range(2*n-1)

我的问题是:有没有办法为非方矩阵定义对角线?如果有,有人会帮助我吗? 我发现在其他问题上没有任何可以帮助我的东西 P.S:我不允许使用numpy 任何形式的帮助,提示,建议将不胜感激。

2 个答案:

答案 0 :(得分:2)

这是方形矩阵代码的简单推广。而不是2*n-1 = n+n-1,而是在外部列表中需要m+n-1,而在内部列表中,您需要检查行和列方向的边界,因为它们将是不同的。

mat = [['V', 'A', 'T'], ['D', 'I', 'S'], ['O', 'I', 'M'], ['F', 'U', 'A']]
rows = len(mat)
cols = len(mat[0])
diags = [[mat[sum_-k][k]
          for k in range(sum_ + 1)
          if (sum_ - k) < rows and k < cols]
         for sum_ in range(rows + cols - 1)]
print(diags)

结果:

[
    ['V'],
    ['D', 'A'],
    ['O', 'I', 'T'],
    ['F', 'I', 'S'],
    ['U', 'M'],
    ['A']
]

答案 1 :(得分:0)

以下代码(在c ++中)将打印对角线:

#include <iostream>

int main() {
    char matrix[4][3] = { {'V',  'A',  'T'},
                          {'D',  'I',  'S'},
                          {'O',  'I',  'M'},
                          {'F',  'U',  'A'}};

    int m = 4, n = 3;

    for (int i = 0; i < m + n - 1; i++) {      //m+n-1 = 4+3-1 = 6 diagonals   
        int z1 = i < n ? 0 : i - n + 1;
        int z2 = i < m ? 0 : i - m + 1;

        for (int j = i - z2; j >= z1; j--)
                std::cout << matrix[j][i - j] << " ";

        std::cout << endl;
    }

    return 0;
}

输出:

V 
D A 
O I T 
F I S 
U M 
A