用CVXPY构建对角块矩阵,部分块为变量

4 投票
1 回答
2104 浏览
提问于 2025-04-30 04:55

我想在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这个函数,不过如果你觉得有用的话,我可以添加一个。

撰写回答