2016-10-24 4 views
0

[Я после ответа here]Кормление 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 

Является ли это ошибка или (более вероятно) я недопонимание this ответ?

ответ

1

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

Это противоречит аргументу размера g_4.shape. Посмотрите на cvxopt's 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 
Смежные вопросы