我正在使用一个名为CVX的优化软件包。它有这些“原子”,它们接受一个CVX表达式并构造一个新的CVX表达式。一个例子是trace原子来计算矩阵的轨迹
我想我需要下面的代码来创建一个CVX变量(一个n乘n的矩阵)并计算它的轨迹
X = cvxpy.Variable((n,n))
tr = cvxpy.atoms.affine.trace.trace(X)
这确实有效,但同样有效的是
X = cvxpy.Variable((n,n))
tr = cvxpy.trace(X)
为什么第二种选择有效?一般来说,当有一个具有嵌套方法的类时,如何在Python中直接调用内部方法
我不会一概而论这种行为。几乎可以肯定,这是设计完成的。很可能自民党不想在追溯层级时过于冗长,所以给了你这个捷径。也有可能(很可能)直接针对cvxpy对象的.trace作用于该对象本身,而较深的一个作用于cvxpy.atoms.affine.trace对象
要非常小心,因为副作用可能不同
为了非常直接地回答您的问题,我建议第二个选项是有效的,因为有人想让他们的API更容易,或者它恰好按照您期望的方式工作
关于第二个问题:嵌套方法不是一件事。cvxpy对象有一个称为atoms的属性,而atoms又有一个称为affine的属性,affine有一个称为trace的方法
相关问题 更多 >
编程相关推荐