将scipy稀疏矩阵转换为cvxopt spmatrix?

6

我需要将一个scipy稀疏矩阵转换为cvxopt的稀疏矩阵格式,即spmatrix,但目前还没有找到任何方法(当然,这个矩阵太大了,无法转换为密集矩阵)。有什么想法可以解决这个问题吗?

3个回答

5
更全面的答案是结合 hpaulj的回答 OferHelman的回答
def scipy_sparse_to_spmatrix(A):
    coo = A.tocoo()
    SP = spmatrix(coo.data.tolist(), coo.row.tolist(), coo.col.tolist(), size=A.shape)
    return SP

定义形状变量会保留 SP 上 A 的维度。我发现,在没有这个额外步骤的情况下,任何在 scipy 稀疏矩阵中结尾为零的列都会丢失。

1

你还需要调用 coo.data.tolist() - benbo

0

来自http://cvxopt.org/userguide/matrices.html#sparse-matrices

cvxopt.spmatrix(x, I, J[, size[, tc]])

看起来很像 scipy.sparse

coo_matrix((data, (i, j)), [shape=(M, N)])

我的猜测是,如果A是以coo格式表示的矩阵,那么

cvxopt.spmatrix(A.data, A.row, A.col, A.shape)

这应该可以工作。(我没有安装cvxopt来测试。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接