# [SciPy-user] Creating a sparse matrix

Robert Cimrman cimrman3@ntc.zcu...
Thu Dec 13 07:27:05 CST 2007

```Nils Wagner wrote:
> On Thu, 13 Dec 2007 14:03:14 +0100
>   Robert Cimrman <cimrman3@ntc.zcu.cz> wrote:
>> Nils Wagner wrote:
>>> Hi all,
>>>
>>> How can I build a sparse matrix from the following array
>>> ?
>>>>>> data
>>> array([['1', '1', '1.7244067583090530E+05'],
>>>         ['1', '2', '4.7526228631699840E+04'],
>>> ...
>>>         ['18', '24', '-1.0245630931609220E+03'],
>>>         ['24', '24', '4.2234547103090340E+03']],
>>>        dtype='|S23')
>>>
>>> data contains information about row, column and the
>>> corresponding entry.
>>>
>>> Any pointer would be appreciated.
>> You read the data from a file, right?
>
> Exactly.
>
> You should convert
>> the row/column
>> indices to integers and values to floats during the
>
> How can I do that on-the-fly ?

Well, supposing the file is not too large:
fd = open( ... )
rows, cols, vals = [], [], []
while 1:
try:
if (len( line ) == 0): break
if len( line ) == 1: continue
except EOFError:
break
line = line.split()
ir, ic, val = int( line[0] ), int( line[1] ), float( line[2] )
rows.append( ir )
cols.append( ic )
vals.append( val )

Alternatively, you can try to use numpy.fromfile( ..., sep = ' ', dtype
= numpy.float64 ) and then reshape it to (n, 3) and re-type the first
two columns to ints.

r.
```