MATLAB là một nền tảng lập trình được sử dụng rộng rãi ngày nay để tính toán số, phân tích thống kê và tạo thuật toán. Đó là một ngôn ngữ rất linh hoạt và cho phép chúng tôi tích hợp công việc của mình với các ngôn ngữ lập trình khác nhau như Python
Không gian làm việc MATLAB lưu tất cả các biến và nội dung của nó trong tệp mat
. Trong hướng dẫn này, chúng ta sẽ học cách mở và đọc các tệp mat
bằng Python
Sử dụng Mô-đun scipy.io
để đọc các tệp .mat
trong Python
Mô-đun scipy.io
có chức năng loadmat[]
, có thể mở và đọc các tệp mat
. Đoạn mã sau cho thấy cách sử dụng chức năng này
import scipy.io
mat = scipy.io.loadmat['file.mat']
Lưu ý rằng phương pháp này không hoạt động đối với phiên bản MATLAB dưới 7. 3. Chúng tôi có thể lưu tệp mat
trong các phiên bản thấp hơn bằng lệnh bên dưới trong MATLAB để tránh điều này
Sử dụng Mô-đun import numpy as np
import h5py
f = h5py.File['somefile.mat','r']
data = f.get['data/variable1']
data = np.array[data] # For converting to a NumPy array
2 để đọc các tệp mat
bằng Python
import numpy as np
import h5py
f = h5py.File['somefile.mat','r']
data = f.get['data/variable1']
data = np.array[data] # For converting to a NumPy array
Nó đã được thảo luận trước đó về cách chúng tôi không thể mở tệp trong MATLAB 7. 3 sử dụng mô-đun scipy.io
trong Python. Điều đáng chú ý là các tệp trong phiên bản 7. 3 trở lên là bộ dữ liệu hdf5, có nghĩa là chúng ta có thể mở chúng bằng thư viện
import numpy as np
import h5py
f = h5py.File['somefile.mat','r']
data = f.get['data/variable1']
data = np.array[data] # For converting to a NumPy array
2. Để phương pháp này hoạt động, mô-đun import numpy as np
import h5py
f = h5py.File['somefile.mat','r']
data = f.get['data/variable1']
data = np.array[data] # For converting to a NumPy array
6 cần được cài đặt, mô-đun này yêu cầu HDF5 trên hệ thống của bạnĐoạn mã dưới đây cho biết cách đọc các tệp mat
bằng phương pháp này
import numpy as np
import h5py
f = h5py.File['somefile.mat','r']
data = f.get['data/variable1']
data = np.array[data] # For converting to a NumPy array
Sử dụng Mô-đun import numpy as np
import h5py
f = h5py.File['somefile.mat','r']
data = f.get['data/variable1']
data = np.array[data] # For converting to a NumPy array
8 để đọc các tệp mat
bằng Python
import numpy as np
import h5py
f = h5py.File['somefile.mat','r']
data = f.get['data/variable1']
data = np.array[data] # For converting to a NumPy array
Mô-đun này có các chức năng cho phép chúng tôi ghi và đọc dữ liệu đến và từ các tệp MATLAB
Hàm loadmat[]
đọc các tệp MATLAB và lưu trữ chúng trong các cấu trúc Python cơ bản như danh sách hoặc từ điển và tương tự như hàm loadmat[]
từ scipy.io
Ví dụ,
from mat4py import loadmat
data = loadmat['example.mat']
Sử dụng Mô-đun from mat4py import loadmat
data = loadmat['example.mat']
3 để đọc các tệp mat
bằng Python
from mat4py import loadmat
data = loadmat['example.mat']
Đối với những người dùng đã có MATLAB có thể sử dụng
from mat4py import loadmat
data = loadmat['example.mat']
3 do chính MathWorks cung cấp. Nó có rất nhiều chức năng, mở rộng ra nhiều thứ hơn là chỉ đọc và viết “. tập tin mat” Tên của tệp mat [không cần. phần mở rộng mat nếu appendmat==True]. Cũng có thể chuyển đối tượng giống như tệp đang mở
mdict chính tả, tùy chọnTừ điển để chèn các biến matfile
appendmat bool, tùy chọnĐúng để nối thêm. mat vào cuối tên tệp đã cho, nếu chưa có. Mặc định là Đúng
byte_order str hoặc Không, tùy chọnNone by default, implying byte order guessed from mat file. Otherwise can be one of [‘native’, ‘=’, ‘little’, ‘’].
mat_dtype bool, tùy chọnNếu đúng, trả về các mảng có cùng kiểu dữ liệu như sẽ được tải vào MATLAB [thay vì kiểu dữ liệu mà chúng được lưu]
squeeze_me bool, tùy chọnCó ép kích thước ma trận đơn vị hay không
chars_as_strings bool, tùy chọnCó chuyển đổi mảng char thành mảng chuỗi hay không
matlab_ compatible bool, tùy chọnTrả về ma trận như sẽ được tải bởi MATLAB [ngụ ý bóp_me=False, chars_as_strings=False, mat_dtype=True, struct_as_record=True]
struct_as_record bool, tùy chọnTải các cấu trúc MATLAB dưới dạng mảng bản ghi NumPy hay dưới dạng mảng NumPy kiểu cũ với dtype=object. Đặt cờ này thành Sai sẽ sao chép hành vi của phiên bản scipy 0. 7. x [trả về mảng đối tượng NumPy]. Cài đặt mặc định là True, vì nó cho phép tải và lưu các tệp MATLAB dễ dàng hơn
Có nên kiểm tra độ dài của các chuỗi nén trong tệp MATLAB hay không để đảm bảo rằng chúng không dài hơn chúng ta mong đợi. Bạn nên kích hoạt tính năng này [mặc định] vì các chuỗi nén quá lâu trong các tệp MATLAB thường chỉ ra rằng các tệp đã gặp phải một số loại lỗi
tên_biến Không có hoặc trình tựNếu Không có [mặc định] - đọc tất cả các biến trong tệp. Mặt khác, tên_biến phải là một chuỗi các chuỗi, cung cấp tên của các biến MATLAB để đọc từ tệp. Trình đọc sẽ bỏ qua bất kỳ biến nào có tên không theo trình tự này, có thể tiết kiệm một số xử lý đọc
simplify_cells Sai, tùy chọnNếu Đúng, hãy trả về cấu trúc chính tả được đơ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 ảnh hưởng đến 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 Sai và Squeeze_me thành True, cần thiết để đơn giản hóa các ô
Trả về . mat_dict mệnh lệnhtừ điển có tên biến làm khóa và ma trận được tải làm giá trị
ghi chú
v4 [Cấp 1. 0], v6 và v7 đến 7. 2 tệp matfile được hỗ trợ
Bạn sẽ cần thư viện HDF5 Python để đọc MATLAB 7. 3 tập tin mat định dạng. Vì SciPy không cung cấp nên chúng tôi không triển khai HDF5/7. 3 giao diện tại đây
ví dụ
>>> from os.path import dirname, join as pjoin >>> import scipy.io as sio
Lấy tên tệp cho một ví dụ. mat từ thư mục tests/data
>>> 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 tin 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 là đối tượng kiểu và các tên tương ứng với các tên trường cấu trúc MATLAB. Điều này có thể bị vô hiệu hóa bằng cách đặt đối số tùy chọn struct_as_record=False
Lấy tên tệp cho một ví dụ. mat chứa cấu trúc MATLAB được gọi là 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ố 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ả kích thước chiều dài 1 đều bị xóa