8.7.6. MVar

class MVar

代表多个变量组成的多维数组。 一般由 Model.addMVar 返回,也可以包装一个已有数组得到一个MVar,如: MVar.fromlist

属性

T

获取MVar对应转置矩阵MVar

ndim

获取MVar的维度个数

shape

获取MVar的shape

size

获取MVar包含的变量个数

方法

fromlist()

将一组变量包装为一个MVar

fromvar()

将一个变量包装为一个MVar

copy()

返回一个当前MVar的拷贝

diagonal()

获取MVar对应对角矩阵MVar

getAttr()

获取MVar对应的attribute值

item()

获取当前MVar唯一包含的变量

reshape()

返回一个拥有相同数据,但拥有新的shape的MVar

setAttr()

设置MVar对应的attribute value

sum()

返回一个线性表达式,其值为所有MVar中的变量相加

tolist()

返回一个数组,包含当前MVar中所有的变量

transpose()

获取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())