[SciPy-user] common storage between matlab and python
Robert Cimrman
cimrman3 at ntc.zcu.cz
Wed May 7 11:54:29 EDT 2008
Neal Becker wrote:
> I've been interested in looking at pytables, but the doc makes it look like
> there's a fair learning curve. Anyone have a _simple_ example, maybe a
> simple numpy vector, or a few vectors?
I used to use the code below, not sure if it works with the current
versions, but anyway, it can give you an idea how simple it is.
best regards,
r.
def writeSparseMatrixHDF5( fileName, mtx, name = 'a sparse matrix' ):
"""Assume CSR/CSC."""
fd = pt.openFile( fileName, mode = "w", title = name )
try:
info = fd.createGroup( '/', 'info' )
fd.createArray( info, 'dtype', mtx.dtype.str )
fd.createArray( info, 'shape', mtx.shape )
fd.createArray( info, 'format', mtx.format )
data = fd.createGroup( '/', 'data' )
fd.createArray( data, 'data', mtx.data )
fd.createArray( data, 'indptr', mtx.indptr )
fd.createArray( data, 'indices', mtx.indices )
except:
print 'matrix must be in SciPy sparse CSR/CSC format!'
print mtx.__repr__()
raise
fd.close()
def readSparseMatrixHDF5( fileName, outputFormat = None ):
import scipy.sparse as sp
constructors = {'csr' : sp.csr_matrix, 'csc' : sp.csc_matrix}
fd = pt.openFile( fileName, mode = "r" )
info = fd.root.info
data = fd.root.data
format = info.format.read()
if not isinstance( format, str ):
format = format[0]
dtype = info.dtype.read()
if not isinstance( dtype, str ):
dtype = dtype[0]
if outputFormat is None:
constructor = constructors[format]
else:
constructor = constructors[outputFormat]
if format in ['csc', 'csr']:
mtx = constructor( (data.data.read(),
data.indices.read(), data.indptr.read()),
dims = info.shape.read(), dtype = dtype )
elif format == 'coo':
mtx = constructor( (data.data.read(),
nm.c_[data.rows.read(), data.cols.read()].T),
dims = info.shape.read(), dtype = dtype )
else:
print format
raise ValueError
fd.close()
if outputFormat in ['csc', 'csr']:
mtx.sort_indices()
return mtx
More information about the SciPy-User
mailing list