我想在 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))

我收到以下错误:



我能做什么?其他方法?我想稍后在 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 - 用一些块作为变量 CVXPY 构建对角块矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26613625/

10-12 14:55