以下是使用scipy.sparse
模块执行此操作的一种方法。我不知道theano
如何实现它的稀疏。这很可能是基于类似的想法在data
,indices
,indptr
(因为它使用的名称,如csc
)
In [224]: A=sparse.csc_matrix([[1.,0,0,2,0],[0,0,3,0,0],[0,1,1,2,0]])
In [225]: A.A
Out[225]:
array([[ 1., 0., 0., 2., 0.],
[ 0., 0., 3., 0., 0.],
[ 0., 1., 1., 2., 0.]])
In [226]: A.data
Out[226]: array([ 1., 1., 3., 1., 2., 2.])
In [227]: A.data[:]=np.exp(A.data)
In [228]: A.A
Out[228]:
array([[ 2.71828183, 0. , 0. , 7.3890561 , 0. ],
[ 0. , 0. , 20.08553692, 0. , 0. ],
[ 0. , 2.71828183, 2.71828183, 7.3890561 , 0. ]])
的csc
格式的主要属性。如果你在创建之后捣鼓它们,data
可能有一些0值,但是新创建的矩阵不应该。
该矩阵也有一个nonzero
方法模拟numpy
之一。在实践中,该矩阵转换为coo
格式,过滤出所有零值,并返回row
和col
属性:
In [229]: A.nonzero()
Out[229]: (array([0, 0, 1, 2, 2, 2]), array([0, 3, 2, 1, 2, 3]))
而csc
格式允许索引只是作为一个致密numpy的数组:
In [230]: A[A.nonzero()]
Out[230]:
matrix([[ 2.71828183, 7.3890561 , 20.08553692, 2.71828183,
2.71828183, 7.3890561 ]])