2016-10-24 57 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。大小第一对待,我(第二阿格),然后J(第三阿格)。

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