Hướng dẫn load matlab table in python - tải bảng matlab trong python

Dựa trên câu trả lời của Jochens, tôi đề xuất một biến thể khác nhau làm tốt cho tôi. Tôi đã viết một tập lệnh Matlab để tự động chuẩn bị bản m-File (xem repositroy Gitlab của tôi với các ví dụ). Nó làm như sau:Matlab Script to prepare the m-file automatically (see my GitLab Repositroy with examples). It does the following:

Trong Matlab cho bảng lớp::

Làm ví dụ giống như Jochens, nhưng liên kết dữ liệu với nhau. Vì vậy, nó dễ dàng hơn để tải nhiều biến. Tên "Bảng" và "Cột" là bắt buộc cho phần tiếp theo.

YourVariableName = struct('table', struct(TableYouWantToLoad), 'columns', {struct(TableYouWantToLoad).varDim.labels})
save('YourFileName', 'YourVariableName')

Trong MATLAB cho tập dữ liệu lớp::

Thay thế, nếu bạn phải xử lý loại bộ dữ liệu cũ.

YourVariableName = struct('table', struct(DatasetYouWantToLoad), 'columns', {get(DatasetYouWantToLoad,'VarNames')})
save('YourFileName', 'YourVariableName')

Trong Python::

import scipy.io as sio
mdata = sio.loadmat('YourFileName')
mtable = load_table_from_struct(mdata['YourVariableName'])

with

import pandas as pd

def load_table_from_struct(table_structure) -> pd.DataFrame():

    # get prepared data structure
    data = table_structure[0, 0]['table']['data']
    # get prepared column names
    data_cols = [name[0] for name in table_structure[0, 0]['columns'][0]]

    # create dict out of original table
    table_dict = {}
    for colidx in range(len(data_cols)):
        table_dict[data_cols[colidx]] = [val[0] for val in data[0, 0][0, colidx]]

    return pd.DataFrame(table_dict)

Nó độc lập với việc tải tệp, nhưng về cơ bản là một phiên bản giảm thiểu của mã Jochens. Vì vậy, xin vui lòng cho anh ấy danh tiếng cho bài viết của anh ấy.

scipy.io.loadmat (file_name, mdict = none, appendMat = true, ** kwargs) [nguồn]#loadmat(file_name, mdict=None, appendmat=True, **kwargs)[source]#

Tải tệp MATLAB.

Parametersfile_namestrfile_namestr

Tên của tệp MAT (không cần tiện ích mở rộng nếu appendMat == true). Cũng có thể vượt qua đối tượng giống như tệp.

mdictdict, tùy chọndict, optional

Từ điển trong đó để chèn các biến matfile.

Phụ lục, tùy chọnbool, optional

Đúng để nối phần mở rộng .mat vào cuối tên tệp đã cho, nếu chưa có. Mặc định là đúng.

byte_orderstr hoặc không, tùy chọnstr or None, optional

Không có gì theo mặc định, ngụ ý thứ tự byte đoán từ tệp mat. Nếu không, có thể là một trong những (’bản địa,‘ =, ’’ Little, ‘,).

mat_dtypeBool, tùy chọnbool, optional

Nếu đúng, các mảng trả về trong cùng một DTYPE như sẽ được tải vào MATLAB (thay vì DTYPE mà chúng được lưu).

Squeeze_Mebool, tùy chọnbool, optional

Có phải ép kích thước ma trận đơn vị hay không.

chars_as_stringsbool, tùy chọnbool, optional

Có chuyển mảng char thành mảng chuỗi hay không.

matlab_compatiblebool, tùy chọnbool, optional

Trả về các ma trận như sẽ được tải bởi MATLAB (ngụ ý Squeeze_me = false, chars_as_strings = false, mat_dtype = true, struct_as_record = true).

struct_as_recordbool, tùy chọnbool, optional

Cho dù tải các cấu trúc MATLAB dưới dạng các mảng bản ghi Numpy hay là mảng numpy kiểu cũ với DTYPE = Object. Đặt cờ này thành Sai sao chép hành vi của SCIPY phiên bản 0.7.x (trả về mảng đối tượng Numpy). Cài đặt mặc định là đúng, bởi vì nó cho phép tải và lưu các tệp MATLAB dễ dàng hơn.

verify_compress_data_integritybool, tùy chọnbool, optional

Liệu độ dài của các chuỗi nén trong tệp MATLAB có nên được kiểm tra hay không, để đảm bảo rằng chúng không dài hơn chúng ta mong đợi. Nên kích hoạt điều này (mặc định) bởi vì các chuỗi được nén trong các tệp MATLAB thường chỉ ra rằng các tệp đã trải qua một số loại tham nhũng.

biến_namesnone hoặc trình tựNone or sequence

Nếu không có (mặc định) - đọc tất cả các biến trong tệp. Mặt khác, biến_names phải là một chuỗi các chuỗi, đặt tên của các biến MATLAB để đọc từ tệp. Người đọc sẽ bỏ qua bất kỳ biến nào với một tên không trong chuỗi này, có thể lưu một số xử lý đọc.

Simplify_cellsfalse, tùy chọnFalse, optional

Nếu đúng, hãy trả về một cấu trúc dict đơn giản hóa (rất hữu ích nếu tệp MAT chứa các mảng ô). Lưu ý rằng điều này chỉ ảnh hưởng đến cấu trúc của kết quả chứ không phải nội dung của nó (giống hệt nhau cho cả hai cấu trúc đầu ra). Nếu đúng, điều này sẽ tự động đặt struct_as_record thành false và squeeze_me thành true, điều này được yêu cầu để đơn giản hóa các ô.

Returnsmat_dictdictmat_dictdict

Từ điển có tên biến là phím và ma trận được tải làm giá trị.

Ghi chú

V4 (Cấp 1.0), V6 và V7 đến 7.2 MATFILES được hỗ trợ.

Bạn sẽ cần một thư viện HDF5 Python để đọc các tệp MAT định dạng MATLAB 7.3. Vì SCIPY không cung cấp một, chúng tôi không triển khai giao diện HDF5 / 7.3 ở đây.

Ví dụ

>>> from os.path import dirname, join as pjoin
>>> import scipy.io as sio

Nhận tên tệp cho một tệp .mat từ thư mục thử nghiệm/dữ liệu.

>>> data_dir = pjoin(dirname(sio.__file__), 'matlab', 'tests', 'data')
>>> mat_fname = pjoin(data_dir, 'testdouble_7.4_GLNX86.mat')

Tải nội dung tệp .mat.

>>> mat_contents = sio.loadmat(mat_fname)

Kết quả là một từ điển, một cặp khóa/giá trị cho mỗi biến:

>>> sorted(mat_contents.keys())
['__globals__', '__header__', '__version__', 'testdouble']
>>> mat_contents['testdouble']
array([[0.        , 0.78539816, 1.57079633, 2.35619449, 3.14159265,
        3.92699082, 4.71238898, 5.49778714, 6.28318531]])

Theo mặc định, SCIPY đọc các cấu trúc MATLAB dưới dạng các mảng numpy có cấu trúc trong đó các trường DTYPE thuộc loại đối tượng và tên tương ứng với tên trường cấu trúc MATLAB. Điều này có thể được vô hiệu hóa bằng cách đặt đối số tùy chọn struct_as_record = false.

Nhận tên tệp cho một tệp .mat có chứa một cấu trúc MATLAB có tên TestStruct và tải nội dung.

>>> matstruct_fname = pjoin(data_dir, 'teststruct_7.4_GLNX86.mat')
>>> matstruct_contents = sio.loadmat(matstruct_fname)
>>> teststruct = matstruct_contents['teststruct']
>>> teststruct.dtype
dtype([('stringfield', 'O'), ('doublefield', 'O'), ('complexfield', 'O')])

Kích thước của mảng có cấu trúc là kích thước của cấu trúc MATLAB, không phải số lượng phần tử trong bất kỳ trường cụ thể nào. Hình dạng mặc định là 2-D trừ khi đối số tùy chọn squeeze_me = true, trong trường hợp đó tất cả các chiều dài 1 được loại bỏ.

>>> teststruct.size
1
>>> teststruct.shape
(1, 1)

Nhận ‘Stringfield, của phần tử đầu tiên trong cấu trúc MATLAB.

YourVariableName = struct('table', struct(DatasetYouWantToLoad), 'columns', {get(DatasetYouWantToLoad,'VarNames')})
save('YourFileName', 'YourVariableName')
0

Nhận phần tử đầu tiên của ‘DoubleField.

YourVariableName = struct('table', struct(DatasetYouWantToLoad), 'columns', {get(DatasetYouWantToLoad,'VarNames')})
save('YourFileName', 'YourVariableName')
1

Tải cấu trúc MATLAB, vắt ra chiều dài 1 kích thước và lấy vật phẩm từ ‘ComplexField.

YourVariableName = struct('table', struct(DatasetYouWantToLoad), 'columns', {get(DatasetYouWantToLoad,'VarNames')})
save('YourFileName', 'YourVariableName')
2

Bạn có thể tải tệp .mat trong Python không?

Bắt đầu từ bản phát hành 7.3 của MATLAB, các tệp MAT thực sự được lưu bằng định dạng HDF5 theo mặc định (trừ khi bạn sử dụng cờ -VX tại thời gian lưu, xem trong MATLAB). Các tệp này có thể được đọc trong Python, ví dụ, gói pytables hoặc H5Py.These files can be read in Python using, for instance, the PyTables or h5py package.

Làm cách nào để chuyển dữ liệu từ MATLAB sang Python?

Nếu bạn thu thập dữ liệu với MATLAB nhưng muốn làm việc với nó bằng Python (ví dụ: tạo biểu đồ đẹp với matplotlib), bạn có thể xuất tệp .mat và sau đó nhập nó vào Python bằng SCIPY.Hãy nhớ rằng trong việc lập chỉ mục Python bắt đầu từ 0, thay vì 1 (đó là cách MATLAB làm điều đó).export a . mat file and then import that into Python using SciPy. Remember that in Python indexing starts at 0, rather than 1 (which is how Matlab does it).

Làm cách nào để tải tệp .mat trong matlab?

Để tải một tập hợp các biến từ tệp MAT trên tab Home, trong phần biến, nhấp vào Nhập dữ liệu.Chọn tệp mat bạn muốn tải và nhấp vào mở.Bạn cũng có thể kéo các biến mong muốn từ bảng chi tiết trình duyệt thư mục hiện tại của tệp mat đã chọn vào trình duyệt không gian làm việc.on the Home tab, in the Variable section, click Import Data. Select the MAT-file you want to load and click Open. You also can drag the desired variables from the Current Folder browser Details panel of the selected MAT-file to the Workspace browser.

Làm cách nào để trực quan hóa tệp .mat?

Làm thế nào để mở một tệp mat.Các tệp MAT là các tệp phím tắt truy cập Microsoft có thể được tạo bằng cách kéo một bảng ra khỏi truy cập và vào máy tính để bàn hoặc vào một thư mục khác.Microsoft Access cần được cài đặt để sử dụng chúng.MATLAB từ MathWorks có thể mở các tệp MAT được sử dụng bởi chương trình đó.MATLAB from MathWorks can open MAT files that are used by that program.