Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python sparse csr matrix: how to serialize it

I have a csr_matrix, which is constructed as follows:

from scipy.sparse import csr_matrix
import numpy as np
row = np.array([0, 0, 1, 2, 2, 2])
col = np.array([0, 2, 2, 0, 1, 2])
data = np.array([1, 2, 3, 4, 5, 6])
a = csr_matrix((data, (row, col)), shape=(3, 3))

Now to serialize (and for some other purpose), I want to get row, col and data information from matrix "a".

Kindly tell me an easy way to achieve it.

Edit: a.data will give me the data, but how to get row and col informaion

like image 497
Shweta Avatar asked Sep 05 '25 03:09

Shweta


1 Answers

coo format has the values that you want:

In [3]: row = np.array([0, 0, 1, 2, 2, 2])   
In [4]: col = np.array([0, 2, 2, 0, 1, 2])
In [5]: data = np.array([1, 2, 3, 4, 5, 6])
In [6]: a = sparse.csr_matrix((data,(row,col)), shape=(3,3))

In [7]: a.data
Out[7]: array([1, 2, 3, 4, 5, 6])    
In [8]: a.indices            # csr has coor in indices and indptr
Out[8]: array([0, 2, 2, 0, 1, 2])
In [9]: a.indptr
Out[9]: array([0, 2, 3, 6])

In [10]: ac=a.tocoo()
In [11]: ac.data
Out[11]: array([1, 2, 3, 4, 5, 6])
In [12]: ac.col
Out[12]: array([0, 2, 2, 0, 1, 2])
In [13]: ac.row
Out[13]: array([0, 0, 1, 2, 2, 2])

These values are compatible with the ones you input, but aren't guaranteed to be the same.

In [14]: a.nonzero()
Out[14]: (array([0, 0, 1, 2, 2, 2]), array([0, 2, 2, 0, 1, 2]))
In [17]: a[a.nonzero()].A
Out[17]: array([[1, 2, 3, 4, 5, 6]])

nonzero also returns the coor, by the same coo conversion, but first it cleans up the data (removing extra zeros, etc).

like image 172
hpaulj Avatar answered Sep 07 '25 15:09

hpaulj