用CVXPY构建对角块矩阵,部分块为变量
我想在CVXPY中生成一个(对角)块矩阵(最好是稀疏的)。
有些块可以是eye(m)
,或者其他的,但我有一个块是:
from cvxopt import *
import cvxpy as cvx
import numpy as np
import scipy
W = cvx.Variable(m,1)
W_diag = cvx.diag(W)
然后我尝试用W_diag
作为一个块来形成块对角矩阵,比如说:
T = scipy.sparse.block_diag((scipy.sparse.eye(m1).todense(), cvx.diag(W))
结果我遇到了以下错误:
TypeError: no supported conversion for types: (dtype('float64'), dtype('O'))
我该怎么办?还有其他方法吗?我想在后面为CVXPY使用矩阵T
作为约束。
1 个回答
7
你不能在SciPy和NumPy的函数中使用CVXPY的对象。你需要用CVXPY来创建块对角矩阵。下面这段代码可以解决你的例子:
import cvxpy as cvx
import numpy as np
W = cvx.Variable(m)
B = np.ones(m)
T = cvx.diag(cvx.vstack(B, W))
目前CVXPY里面没有block_diag
这个函数,不过如果你觉得有用的话,我可以添加一个。