样品稀疏矩阵:
In [363]: A=sparse.csr_matrix(np.arange(12).reshape(3,4))
其显示为致密的(常规numpy的)阵列(例如A.toarray()
)
In [364]: A.A
Out[364]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]], dtype=int32)
及其repr
显示
In [365]: A
Out[365]:
<3x4 sparse matrix of type '<class 'numpy.int32'>'
with 11 stored elements in Compressed Sparse Row format>
及其str()
显示器(你看到了什么)
In [366]: print(A)
(0, 1) 1
(0, 2) 2
(0, 3) 3
(1, 0) 4
(1, 1) 5
(1, 2) 6
(1, 3) 7
(2, 0) 8
(2, 1) 9
(2, 2) 10
(2, 3) 11
A.data
是它的数据属性的值。你可以用nonzero
获取坐标:
In [368]: A.nonzero()
Out[368]:
(array([0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int32),
array([1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int32))
或转换csr
到coo
格式,并得到所有3个数组:
In [369]: Ac=A.tocoo()
In [370]: Ac.data
Out[370]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], dtype=int32)
In [371]: Ac.row
Out[371]: array([0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int32)
In [372]: Ac.col
Out[372]: array([1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int32)
你可以把它们变成一个3列阵列:
In [373]: np.column_stack((Ac.col, Ac.row, Ac.data))
Out[373]:
array([[ 1, 0, 1],
[ 2, 0, 2],
[ 3, 0, 3],
[ 0, 1, 4],
[ 1, 1, 5],
[ 2, 1, 6],
[ 3, 1, 7],
[ 0, 2, 8],
[ 1, 2, 9],
[ 2, 2, 10],
[ 3, 2, 11]], dtype=int32)
除非你的数据是浮动的,那么这将成为所有浮动。它不能混合整数和浮点数。
您可以将它们组装到一个带有2个int字段和一个float字段的结构化数组中。如果需要,我可以详细说明。
但是您提到的数据框表明您熟悉pandas
- 如果是这样的话,您可能可以从此处获取它。
非常感谢..它的工作! – user3775161