2013-12-13 18 views
8

Ich benutze Python w/scipy-Paket, um die MatLab-Datei zu lesen.Lesen MatLab-Dateien in Python mit scipy

Allerdings dauert es zu lange und stürzt ab.

Die Dataset ist etwa 50 ~ MB groß

Gibt es einen besseren Weg, um die Daten zu lesen und eine Kantenliste bilden?

Mein Python-Code

import scipy.io as io 
data=io.loadmat('realitymining.mat') 
print data 
+0

Welche Fehlermeldung? – Daniel

+0

Keine Fehler. Nur dass es viel Zeit braucht. –

+2

Ihre Frage sagt "es stürzt ab". – Daniel

Antwort

0

Ich kann es nach dem Entpacken laden. Aber es dehnt die Erinnerung aus.

Wenn ich versuche, es zu laden mit octave ich:

octave:1> load realitymining.mat 
error: memory exhausted or requested size too large for range of Octave's index type -- trying to return to prompt 

In IPython

In [10]: data.keys() 
Out[10]: ['network', 's', '__version__', '__header__', '__globals__'] 
In [14]: data['__header__'] 
Out[14]: 'MATLAB 5.0 MAT-file, Platform: MACI, Created on: Tue Sep 29 20:13:23 2009' 
In [15]: data['s'].shape 
Out[15]: (1, 106) 
In [17]: data['s'].dtype 
Out[17]: dtype([('comm', 'O'), ('charge', 'O'), ('active', 'O'), ('logtimes', 'O'),... 
    ('my_intros', 'O'), ('home_nights', 'O'), ('comm_local', 'O'), ('data_mat', 'O')]) 
# 58 fields 
In [24]: data['s']['comm'][0,1].shape 
Out[24]: (1, 30) 
In [31]: data['s']['comm'][0,1][0,1] 
Out[31]: ([[732338.8737731482]], [[355]], [[-1]], [u'Packet Data'], [u'Outgoing'], 
    [[40]], [[nan]]) 
In [33]: data['s']['comm'][0,1]['date'] 
Out[33]: 
array([[array([[ 732338.86915509]]), array([[ 732338.87377315]]), 
    ... 
    array([[ 732340.48579861]]), array([[ 732340.52778935]])]], dtype=object) 

Schauen Sie sich die Stücke. Einfach versuchen, print data oder print data['s'] dauert zu lange. Anscheinend ist es einfach zu groß, um es schnell zu formatieren.

Um diese Daten praktisch zu erhalten, würde ich vorschlagen, sie einmal in Python oder Matlab zu laden und dann die nützlichen Teile in eine oder mehrere Dateien zu speichern.

0

Vielleicht können Sie zuerst an einem Teil der Daten arbeiten, wie die network in der Struktur, ich habe es here mit MATLAB ausgepackt.

Noch arbeiten an, wie man den Rest größere Struktur aufräumt.

1

Sie könnten nur die einzelnen Felder der Struktur in einer anderen Textdatei speichern, zB:

save('friends.txt', '-struct', 'network', 'friends', '-ascii') 

und jede Datei aus Python separat laden

friends = numpy.loadtxt('friends.txt') 

die sofort lädt.