2009-12-31 29 views
7

Sau this question yêu cầu (và câu trả lời) cách đọc tệp .mat được tạo trong Matlab bằng Scipy, tôi muốn biết cách truy cập các trường trong cấu trúc đã nhập.Cách truy nhập các trường trong cấu trúc được nhập từ tệp .mat bằng cách sử dụng loadmat trong Python?

Tôi có một tập tin trong Matlab mà từ đó tôi có thể nhập một struct:

>> load bla % imports a struct called G 
>> G 

G = 

     Inp: [40x40x2016 uint8] 
     Tgt: [8x2016 double] 
     Ltr: [1x2016 double] 
    Relevant: [1 2 3 4 5 6 7 8] 

Bây giờ tôi muốn làm điều tương tự bằng Python:

x = scipy.io.loadmat('bla.mat') 
>>> x 
{'__version__': '1.0', '__header__': 'MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Wed Jun 07 21:17:24 2006', 'G': array([[<scipy.io.matlab.mio5.mat_struct object at 0x0191F230>]], dtype=object), '__globals__': []} 
>>> x['G'] 
array([[<scipy.io.matlab.mio5.mat_struct object at 0x0191F230>]], dtype=object) 
>>> G = x['G'] 
>>> G 
array([[<scipy.io.matlab.mio5.mat_struct object at 0x0191F230>]], dtype=object) 

Câu hỏi đặt ra là, làm thế nào tôi có thể truy cập các thành viên của cấu trúc G: Inp, Tgt, LtrRelevant, cách tôi có thể làm trong Matlab?

+0

Trợ giúp (G) và dir (G) nói (và tương tự cho G [0]) – Kimvais

+0

Điều gì xảy ra nếu bạn sử dụng 'x = scipy.io.loadmat (' bla.mat ', struct_as_record = True) '? Xem http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.loadmat.html – unutbu

Trả lời

6

Trước tiên, tôi khuyên bạn nên nâng cấp lên Scipy svn nếu có thể - đã có sự phát triển tích cực của iL MATLAB với một số tốc độ thực sự ấn tượng gần đây.

Cũng như đã đề cập, có thể đáng thử với struct_as_record=True. Nhưng nếu không bạn sẽ có thể nhận được nó bằng cách chơi xung quanh tương tác.

G của bạn là một mảng các đối tượng cấu trúc mio - bạn có thể kiểm tra G.shape ví dụ. Trong trường hợp này, tôi nghĩ rằng G = x['G'][0,0] sẽ cung cấp cho đối tượng bạn muốn. Sau đó, bạn sẽ có thể truy cập G.Inp v.v.

+1

Điều này cũng phù hợp với tôi, tuy nhiên tôi phải truy cập nó dưới dạng một từ điển/từ điển, nghĩa là x [ 'G'] [0, 0] ['Inp'] – eacousineau

Các vấn đề liên quan