2016-10-24 3 views
0

[Ich folge die Antwort here]Fütterung scipy.sparse() Sparse-Matrizen in CVXOPT

ich schwach besetzte Matrizen in CVXOPT zu füttern versuchen. Betrachten Sie das folgende Beispiel minimal:

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) 

ich:

TypeError: dimension too small 

Ist das ein Bug oder (wahrscheinlicher) bin ich Missverständnis this Antwort?

Antwort

1

Sie haben während des Matrixerstellungsaufrufs innerhalb der Argumente die Reihenreihenfolge in Spaltenreihenfolge geändert.

Dies steht in Konflikt mit dem Argument der Größe g_4.shape. Schauen Sie sich cvxopt's docs an. Größe behandelt zuerst, I (2. arg), dann J (3. arg).

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 
Verwandte Themen