在python中创建一个三对角块矩阵

时间:2018-01-02 22:37:48

标签: python

enter image description here

如何使用python创建此矩阵?

我已经创建了S,T,X,W,Y和Z以及L的第一行和最后一行。

1 个答案:

答案 0 :(得分:0)

这样的东西(这是草稿!)。创建一个存储3个列表(对角线,上对角线和下对角线)的类,并公开一种编辑这些值的方法。

class TBMatrix:
    def __init__(self,size):
        self._size = size #Has to be square I guess?
        self._diagonal = [None for i in range(0,size)]
        self._upper_diagonal = [None for i in range(0,size - 2)]
        self._lower_diagonal = [None for i in range(0,size - 2)]
    def get(self,row,col):
        if row == col:
            return self._diagonal[row]
        if row == col - 1:
            return self._lower_diagonal[col]
        if row == col + 1:
            return self._upper_diagonal[row]
        return 0 #or None, if you want a matrix that contains objects 
    def set(self,row,col,value):
        if row == col:
            self._diagonal[row] = value
        elif row == col - 1:
            self._lower_diagonal[col] = value
        elif row == col + 1:
            self._upper_diagonal[row] = value
        else:
            #No effect, maybe you want to throw an exception?
            pass

这是一个快速草案,你需要做一堆检查,以确保没有尝试在列表大小之外分配索引。但这应该让你开始。

另一种方法是覆盖__getitem____setitem__以返回一个满0或None的行,除非它需要为self._diagonal保留一个点,{{ 1}}和self._upper_diagonal。但它似乎更复杂。