使用一些块作为变量CVXPY构建对角块矩阵

时间:2014-10-28 16:33:21

标签: 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)

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

T = scipy.sparse.block_diag((scipy.sparse.eye(m1).todense(), cvx.diag(W))

我收到以下错误:

  

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

我该怎么办?其他方法?我想稍后在CVXPY的约束中使用矩阵T

1 个答案:

答案 0 :(得分: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))

目前CVXPY中没有block_diag功能,但如果它仍然对您有帮助,我可以添加一个。