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))

block_diag現在、CVXPY には機能がありませんが、それでも役立つ場合は追加できます。

于 2014-12-13T03:28:39.273 に答える