【问题标题】:Creation a tridiagonal block matrix in python [duplicate]在python中创建一个三对角块矩阵[重复]
【发布时间】:2018-06-12 14:54:48
【问题描述】:

如何使用 python 创建这个矩阵?

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

【问题讨论】:

    标签: python


    【解决方案1】:

    类似这样的东西(这是草稿!)。创建一个存储 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._diagonalself._upper_diagonalself._lower_diagonal 保留一个位置。但这似乎更复杂。

    【讨论】:

      猜你喜欢
      • 2019-03-15
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多