3

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

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

4

1 回答 1

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功能,如果对你有帮助的话我可以加一个。

于 2014-12-13T03:28:39.273 回答