how to create a sparse matrix from lists of numbers

Question:

I have three lists namely A , B , C
All these lists contain 97510 items . I need to create a sparse matrix like this

matrix[A[0]][B[0]] = C[0]

For example ,

A=[1,2,3,4,5] 
B=[7,8,9,10,11] 
C=[14,15,16,17,18]

I need to create a sparse matrix with

matrix[1][7] = 14 # (which is C[0])
matrix[2][8] = 15 # and so on ..... 

I tried and python gives me an error saying that "Index values must be continuous"

How do I do it?

Asked By: dheeraj

||

Answers:

I suggest you have a look at the SciPy sparse matrices. E.g. a COO sparse matrix:

matrix = sparse.coo_matrix((C,(A,B)),shape=(5,5))

Note: I just took the COO matrix because it was in the example, you can take any other. You probably have to try which one is most suitable for your situation. They all differ in the way how the data is compressed and this has an influence on the performance of certain operations.

Answered By: Felix Kling

Have a look at numpy/scipy which has support for sparse matrixes. See e.g. here

Answered By: Fredrik Pihl

If you simply need a way how to get matrix[A[0]][B[0]] = C[0] you can use the following:

A=[1,2,3,4,5]
B=[7,8,9,10,11]
C=[14,15,16,17,18]

matrix = dict((v,{B[i]:C[i]}) for i, v in enumerate(A))

EDITED(thanx for gnibbler):

A = [1,2,3,4,5]
B = [7,8,9,10,11]
C = [14,15,16,17,18]

matrix = dict(((v, B[i]), C[i]) for i, v in enumerate(A))
Answered By: Artsiom Rudzenka

It is very simple to use a dict, especially if you are willing to change the way you write the indices slightly

>>> A=[1,2,3,4,5] 
>>> B=[7,8,9,10,11] 
>>> C=[14,15,16,17,18]
>>> matrix=dict(((a,b),c) for a,b,c in zip(A,B,C))
>>> matrix[1,7]
14
>>> matrix[2,8]
15
>>> 
Answered By: John La Rooy
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.