构建对角块矩阵,将一些块作为变量CVXPY

hoo*_*oot 3 python numpy scipy cvxopt 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)
Run Code Online (Sandbox Code Playgroud)

然后我尝试用块形成块对角矩阵W_diag,例如:

T = scipy.sparse.block_diag((scipy.sparse.eye(m1).todense(), cvx.diag(W))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

TypeError:类型不支持转换:(dtype('float64'),dtype('O'))

我能做什么?其他方法?我想T稍后在CVXPY的约束中使用矩阵.

ste*_*ven 5

您不能在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))
Run Code Online (Sandbox Code Playgroud)

block_diag现在CVXPY中没有任何功能,但是如果它仍然对你有用,我可以加一个.