2013-03-19 35 views
8

Tôi có tệp .mat được tạo từ MATLAB 2012b. Nó chứa một biến với lớp matlab do người dùng định nghĩa.Tệp .mat có chứa các lớp matlab trong python

Khi tải các tập tin sử dụng scipy.io.loadmat trong python 3.3, tôi nhận được như sau:

mat=scipy.io.loadmat('D:\test.mat') 
mat 
{'__header__': b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Fri Feb 22 15:26:28 2013', '__function_workspace__': array([[ 0, 1, 73, ..., 0, 0, 0]], dtype=uint8), '__globals__': [], '__version__': '1.0', 'None': MatlabOpaque([ (b'futureDS', b'MCOS', b'cStream', [[3707764736], [2], [1], [1], [1], [1]])], 
     dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')])} 

tôi tìm cách để truy cập vào "futureDS" đối tượng kiểu "cStream" nhưng dường như không thể làm vì vậy sử dụng mat ['None']. Gọi mat ['None'] kết quả đơn giản trong:

MatlabOpaque([ (b'futureDS', b'MCOS', b'cStream', [[3707764736], [2], [1], [1], [1], [1]])], 
     dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')]) 

Tôi bị kẹt ở đây. Tôi mới để python và cố gắng để cổng công việc cũ của tôi từ MATLAB. Bất kỳ trợ giúp sẽ được đánh giá cao.

Cảm ơn bạn.

Trả lời

4

Thật không may, SciPy không hỗ trợ tệp mat có chứa đối tượng lớp kiểu mới Phần tử __function_workspace__ trong từ điển mat trả về chứa thông tin bạn đang theo dõi theo một số cách chưa được thiết kế và chưa được thiết kế ngược.

Giải pháp dễ nhất là chuyển đổi các lớp tùy chỉnh của bạn thành các đối tượng cơ bản struct trong Matlab trước khi lưu chúng vào đĩa. Điều này có thể đạt được (mặc dù có cảnh báo) bằng cách chỉ cần gọi struct(futureDS). Nó cho thấy tất cả các thuộc tính công khai và riêng tư dưới dạng các trường đơn giản, có thể được đọc bởi bất kỳ người đọc bên thứ ba nào đáng giá muối của nó.

(Thêm về mặt kỹ thuật, Matlab lưu các đối tượng này với id loại Matlab Array là 17; official documentation (PDF) chỉ liệt kê các loại lên đến 15).

+2

Là một bản đăng, tôi đã quản lý để đảo ngược kỹ sư rất nhiều định dạng này. [Xem sổ ghi chép IJulia này] (http://nbviewer.ipython.org/gist/mbauman/9121961) để biết chi tiết. –

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