8.6.6. MVar¶
- class MVar¶
代表多个变量组成的多维数组。 一般由 Model.addMVar 返回,也可以包装一个已有数组得到一个MVar,如: MVar.fromlist
属性
获取MVar对应转置矩阵MVar
获取MVar的维度个数
获取MVar的shape
获取MVar包含的变量个数
- T¶
获取MVar对应转置矩阵MVar
- ndim¶
获取MVar的维度个数
- shape¶
获取MVar的shape
- size¶
获取MVar包含的变量个数
方法
fromlist()
将一组变量包装为一个MVar
fromvar()
将一个变量包装为一个MVar
返回一个当前MVar的拷贝
获取MVar对应对角矩阵MVar
获取MVar对应的attribute值
获取当前MVar唯一包含的变量
返回一个拥有相同数据,但拥有新的shape的MVar
设置MVar对应的attribute value
返回一个线性表达式,其值为所有MVar中的变量相加
返回一个数组,包含当前MVar中所有的变量
获取MVar对应转置矩阵MVar
- static fromlist(li)
将一组变量包装为一个MVar
- Parameters
li – 包含变量的列表
example:
m = Model() mat = MVar.fromlist([x0, x1, x2, x3]).reshape(2, 2)
- static fromvar(var)
将一个变量包装为一个MVar
- Parameters
var – 要包装的变量
example:
mat11 = MVar.fromvar(x)
- copy()¶
返回一个当前MVar的拷贝
example:
mat1 = mat.copy()
- diagonal()¶
获取MVar对应对角矩阵MVar
example:
print(mat.diagonal())
- getAttr(attrname)¶
获取MVar对应的attribute值
- Parameters
attrname – attribute的名称
example:
m = Model() mat = m.addMVar((2, 2)) print(mat.lb) print(mat.getAttr(MDO.Attr.LB))
Note
Attribute的读写也可以直接通过对象属性读写完,这种情况下,属性名称大小写不敏感
- item()¶
获取当前MVar唯一包含的变量
example:
mat = m.addMVar((2, 2)) first = mat[0, 0] print(type(first)) print(type(first.item()))
Note
如果当前MVar包含不止一个变量将抛出异常
- reshape(*shape)¶
返回一个拥有相同数据,但拥有新的shape的MVar
- Parameters
*shape –
新的shape
example:
m = Model() mat = m.addMVar((2, 2)) x = mat.reshape(1, 4) # default to fold along rows x_c = mat.reshape(-1, order='C') # fold along rows x_f = mat.reshape(-1, order='F') # fold along columns
- setAttr(attrname, attrvalues)¶
设置MVar对应的attribute value
- Parameters
attrname – 要设置的attribute的名称
attrvalues – 要设置的attribute的新值。可以是标量或数组
example:
m = Model() mat = m.addMVar((2, 2)) mat.lb = [1.0, 2.0, 3.0, 4.0] mat.setAttr(MDO.Attr.LB, 5.0)
Note
Attribute的读写也可以直接通过对象属性读写完,这种情况下,属性名称大小写不敏感
- sum(axis=None)¶
返回一个线性表达式,其值为所有MVar中的变量相加
- Parameters
axis=None – 求和的沿轴
example:
linExpr = mat.sum()
- tolist()¶
返回一个数组,包含当前MVar中所有的变量。
example:
mat = m.addMVar((2,)) x = mat.tolist() print(x[0] ** 2 + 2 * x[0] * x[1] + x[1] ** 2)
- transpose()¶
获取MVar对应转置矩阵MVar
example:
print(mat.transpose())