原子
原子(小写字母”a”)是一种数学函数,可以应用于 Expression
对象,并返回一个 Expression
对象。
原子及其组合是CVXPY中构建数学表达式树的机制。
每个原子都带有关于其域、符号、曲率、对数-对数曲率和单调性的信息;这些信息使得原子实例能够判断它们是否是DCP或DGP。参见 原子函数 页面,了解每个原子属性的简洁易懂的摘要。
- 仿射原子
- 逐元素原子
- 其他原子
- cummax
- diff_pos
- 排序点
- 逆矩阵减去单位矩阵
- 几何平均
- 广义矩阵相乘
- 调和平均
- 逆积
- 最大特征值
- lambda_min
- lambda_sum_largest
- lambda_sum_smallest
- log_det
- log_sum_exp
- matrix_frac
- max
- 最小值
- 混合范数
- 范数
- norm1
- norm2
- norm_inf
- normNuc
- one_minus_pos
- 透视
- pf_eigenvalue
- pnorm
- Pnorm
- ptp
- prod
- quad_form
- quad_over_lin
- resolvent
- sigma_max
- std
- sum_largest
- sum_smallest
- sum_squares
- SuppFuncAtom(支持函数原子)
- tr_inv
- tv(总变差)
- var
- von_neumann_entr
原子的表示
从实现的角度来看,原子可以是某个类的构造函数。例如,原子 \(X \mapsto \lambda_{\max}(X)\) 通过构造一个 lambda_max
类的实例来应用,该类直接继承自 Atom
类,并间接继承自 Expression
类。大多数原子都是以这种方式实现的。
或者,原子可以是一个包装器,它初始化并返回某个其他类的原子。例如,运行
import cvxpy as cp
X = cp.Variable(shape=(2,2), symmetric=True)
expr = cp.lambda_min(X)
print(type(expr))
显示
<class 'cvxpy.atoms.affine.unary_operators.NegExpression'>
这是因为 (1) CVXPY 将 lambda_min()
实现为
(2) 否定运算符是基于类的原子,并且 (3) 表达式的精确类型是基于应用于它的最后一个基于类的原子(如果应用了任何此类原子)。
Atom
- class cvxpy.atoms.atom.Atom(*args)[source]
Bases:
Expression
Abstract base class for atoms.
- property domain: List[Constraint]
A list of constraints describing the closure of the region where the expression is finite.
- property grad
Gives the (sub/super)gradient of the expression w.r.t. each variable.
Matrix expressions are vectorized, so the gradient is a matrix. None indicates variable values unknown or outside domain.
- Returns:
A map of variable to SciPy CSC sparse matrix or None.