2013-12-13 21 views
8

私はMatLabファイルを読むためにpython w/scipyパッケージを使用しています。PythonでのMatLabファイルの読み込み

ただし、時間がかかりすぎてクラッシュします。

Datasetはサイズ

で約50〜MBのデータを読み込み、エッジリストを形成するために任意のより良い方法はありますか?

私のpythonコード

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

どのようなエラーメッセージが表示されますか? – Daniel

+0

エラーはありません。ちょうどそれには多くの時間がかかります。 –

+2

あなたの質問は、 "それはクラッシュする"と言います。 – Daniel

答えて

0

私は解凍した後、それを読み込むことができます。しかし、それは記憶を伸ばしている。

私はoctaveでそれをロードしようとすると、私が得る: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) 

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 

は、作品を見てください。単にprint dataまたはprint data['s']にしようとすると時間がかかります。明らかに素早くフォーマットするには構造が大きすぎます。

このデータを実際に取得するには、PythonまたはMatlabで一度読み込み、有用な部分を1つ以上のファイルに保存することをお勧めします。

0

おそらく最初にstructのnetworkとして彼のデータの一部を処理することができます。私はそれをhere MATLABを使って解凍しました。

残りの大きな構造体を整理する方法についてはまだ作業中です。

1

あなただけ例えば、異なるテキストファイルに構造体の各フィールドを救うことができる:

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

とPython

即座にロード
friends = numpy.loadtxt('friends.txt') 

とは別に、各ファイルをロードします。

関連する問題