2013-12-13 3 views
8

Я использую пакет python w/scipy для чтения файла MatLab.Чтение файлов MatLab в python с scipy

Однако это занимает слишком много времени и падает.

Dataset составляет около 50 ~ МБ

Есть ли лучший способ чтения данных и сформировать список края?

Мой питон код

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 data или print data['s'] занимает слишком много времени. По-видимому, это слишком большая структура для форматирования быстро.

Чтобы получить эти данные, я бы предложил загрузить его один раз в Python или Matlab, а затем сохранить полезные фрагменты в один или несколько файлов.

0

Возможно, вы можете сначала поработать над частицами данных как network в структуре, я распаковал ее here с помощью MATLAB.

По-прежнему работает над тем, как убрать оставшуюся большую структуру.

1

Вы можете просто сохранить каждое поле структуры в другом текстовом файле, например:

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

и загрузить каждый файл отдельно от питона

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

который загружает мгновенно.

Смежные вопросы