2013-12-13 45 views
8

我正在使用python w/scipy包來讀取MatLab文件。在Python中讀取MatLab文件w/scipy

但是它需要很長的時間和崩潰。

Dataset的大小約爲50〜MB

有沒有什麼更好的方法來讀取數據,並形成邊緣列表?

我的Python代碼

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

什麼錯誤信息? – Daniel

+0

沒有錯誤。只需要很多時間。 –

+2

你的問題說「它崩潰」。 – Daniel

回答

0

我可以解壓縮後加載它。但它正在延伸記憶。

當我試着使用octave加載它,我得到:

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 

在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) 

看那件。只需嘗試print dataprint data['s']時間太長。顯然,它的結構太大,無法快速格式化。要實際得到這些數據,我建議在Python或Matlab中加載一次,然後將有用的部分保存到一個或多個文件中。

0

也許你可以在結構中首先使用他的部分數據作爲network,我已經用MATLAB解壓縮了它here

仍在研究如何整理其餘更大的結構。

1

你可以只保存結構的各個領域在不同的文本文件,如:

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

和蟒蛇

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

它加載立即分裝每個文件。