Python类对象:如何避免重复计算?

2024-09-28 20:56:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想征求您对如何构造最适合我需要的Python类的建议

假设我首先介绍一个Python类LatticeClass。特别是,LatticeClass附带了一个方法TheModel(),该方法可以创建一个埃尔米特矩阵HH,如下所示:

obj = LatticeClass()
obj.a = 3.0
obj.b = -0.80
HH = obj.TheModel()

现在我想介绍另一个Python类LatticeProperty,它是从LatticeClass继承的。这个类将计算HH的特征值和特征向量,并使用它们来计算其他东西。例如,以下是我编写的代码:

class LatticeProperty(LatticeClass):
    def __init__(self):
        super().__init__()

    @property
    def spectrum(self):
        HH = self.TheModel()
        mat = HH.todense()
        print(mat.shape)
        val, vec = Lib.eig(mat)
        return val, vec

    def Method1(self):
        val, vec = self.spectrum
        total_energy = val.sum()
        return total_energy

假设我现在编写以下代码:

newobj = LatticeProperty()
newobj.a = 3.0
newobj.b = -0.80

我想要的是:

  1. 当我调用newobj.spectrum时,除非我改变参数ab,否则我只需要让系统给我特征值和特征向量,而不需要再次进行对角化
  2. 当我调用newobj.Method1()时,它应该使用存储的特征值和特征向量给出最终答案,而不调用矩阵对角化

然而,此时,每当我调用newobj.spectrum时,系统都执行矩阵对角化。我应该如何解决此问题

谢谢


Tags: selfobjdefhh矩阵valspectrummat