Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Read Matlab matrix into Python

When I'm trying to read a Matlab matrix into python, I get the following error

>>> scipy.io.loadmat("Dynamical.mat")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/mio.py", line 151, in loadmat
    MR = mat_reader_factory(file_name, appendmat, **kwargs)
  File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/mio.py", line 105, in mat_reader_factory
    mjv, mnv = get_matfile_version(byte_stream)
  File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/miobase.py", line 221, in get_matfile_version
    % ret)
ValueError: Unknown mat file type, version 46, 48

The Dynamical.mat is a file containing the matrix

% Size = 30 30 
% Nonzeros = 252 
zzz = zeros(252,3);
zzz = [
1 1  1.4019896354966477e+01
1 2  0.0000000000000000e+00
1 3  0.0000000000000000e+00
...
like image 818
Roy Avatar asked Feb 07 '13 03:02

Roy


1 Answers

This question seems to be inactive for a while, but it is good to let one alternative in case you still need to read this .mat file, assuming it is always in the format you specified:

def read_mat( file_path ):
    import numpy as np
    mat = open(file_path, 'r')
    mat.next() # % Size = 30 30
    length = int(mat.next().split()[-1])
    mat.next() # zzz = zeros(18,3)
    mat.next() # zzz = [
    ans = np.array([ map(float, mat.next().split()) for i in xrange(length) ])
    mat.close()
    return ans
like image 172
Saullo G. P. Castro Avatar answered Oct 02 '22 03:10

Saullo G. P. Castro