python – 使用一些块作为变量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.
解决方法:
您不能在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函数,但如果它仍然对你有用,我可以添加一个.
标签:python,numpy,scipy,cvxopt,cvxpy 来源: https://codeday.me/bug/20190830/1767721.html