将NumPy数组转换为SciPy稀疏矩阵

7

给定一个任意的numpy数组(ndarray),是否有一种函数或简短的方法将其转换为scipy.sparse矩阵?

我希望有一种像这样的方法:

A = numpy.array([0,1,0],[0,0,0],[1,0,0])
S = to_sparse(A, type="csr_matrix")
3个回答

9

我通常会做类似于:

>>> import numpy, scipy.sparse
>>> A = numpy.array([[0,1,0],[0,0,0],[1,0,0]])
>>> Asp = scipy.sparse.csr_matrix(A)
>>> Asp
<3x3 sparse matrix of type '<type 'numpy.int64'>'
    with 2 stored elements in Compressed Sparse Row format>

嗯,这很容易,我应该早点尝试。我没想到构造函数会进行转换。这对其他稀疏矩阵类型的构造函数也适用。 - clstaudt

4
一个非常有用且相关的示例在帮助文件中!
import scipy.sparse as sp
help(sp)

这将会产生:
Example 2
---------

Construct a matrix in COO format:

>>> from scipy import sparse
>>> from numpy import array
>>> I = array([0,3,1,0])
>>> J = array([0,3,1,2])
>>> V = array([4,5,7,9])
>>> A = sparse.coo_matrix((V,(I,J)),shape=(4,4))

值得注意的是,各种构造函数如下(再次引用帮助文档):
    1. csc_matrix: Compressed Sparse Column format
    2. csr_matrix: Compressed Sparse Row format
    3. bsr_matrix: Block Sparse Row format
    4. lil_matrix: List of Lists format
    5. dok_matrix: Dictionary of Keys format
    6. coo_matrix: COOrdinate format (aka IJV, triplet format)
    7. dia_matrix: DIAgonal format

To construct a matrix efficiently, use either lil_matrix (recommended) or
dok_matrix. The lil_matrix class supports basic slicing and fancy
indexing with a similar syntax to NumPy arrays.  

您的示例可以非常简单,如下所示:

S = sp.csr_matrix(A)

1
@clstaudt,我不确定您正在寻找什么,“sp.csr_matrix(A)”将从密集的numpy数组“A”构造一个“csr”类型矩阵,而“sp.csc_matrix(A)”将构造一个类型为“csc”的矩阵等等... 构造函数就是您要寻找的高效转换函数(但请阅读帮助中的注意事项)。 - Hooked
你是对的,构造函数确实可以完成我想要的转换。我原本以为它们只接受与条目存储方式相对应的参数,例如:A = sparse.coo_matrix((V,(I,J)),shape=(4,4))。 - clstaudt

0

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