Подача разреженных матриц scipy.sparse () в CVXOPT

[Я следую ответу здесь]

Пытаюсь скармливать разреженные матрицы в 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

Это ошибка или (что более вероятно) я неправильно понимаю этот ответ?


person user189035    schedule 24.10.2016    source источник


Ответы (1)


Вы только что переключили порядок столбцов на порядок столбцов в своих аргументах во время вызова создания матрицы.

Это противоречит аргументу размера g_4.shape. Просмотрите документы cvxopt. Сначала учитывается размер, 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
person sascha    schedule 24.10.2016