0

[私はここで答えに従っています]

CVXOPT でスパース マトリックスをフィードしようとしています。次の最小限の例を考えてみましょう。

import numpy
import cvxopt
import scipy.sparse

K = 10
n = 36

g_0 = numpy.random.randn(n, K)
d_0 = numpy.zeros(n) + 1.0
g_2 = scipy.sparse.dia_matrix(([d_0], [0]), shape=(n, n))
g_3 = scipy.sparse.dia_matrix(([-d_0], [0]), shape=(n, n))
g_1 = scipy.sparse.coo_matrix(g_0)
g_4 = scipy.sparse.hstack([g_1, g_2, g_3])

A   = cvxopt.spmatrix(g_4.data.tolist(), g_4.col.tolist(), g_4.row.tolist(), size = g_4.shape)

私は得る:

TypeError: dimension too small

これはバグですか、それとも (おそらく)この回答を誤解していますか?

4

1 に答える 1

1

matrix-creation 呼び出し中に、引数内で row-column-order を column-row-order に切り替えました。

これは size の引数と矛盾していますg_4.shapecvxopt の docsを見てください。サイズは最初に I (2 番目の引数)、次に J (3 番目の引数) を扱います。

A   = cvxopt.spmatrix(g_4.data.tolist(), g_4.col.tolist(), g_4.row.tolist(), size = g_4.shape)  # wrong
A   = cvxopt.spmatrix(g_4.data.tolist(), g_4.row.tolist(), g_4.col.tolist(), size = g_4.shape)  # correct
于 2016-10-24T10:56:38.813 に答える