Hướng dẫn how do i import a .mat file into python? - làm cách nào để nhập tệp .mat vào python?

MATLAB là một nền tảng thực sự phổ biến để điện toán khoa học trong học viện. Tôi đã sử dụng nó trong suốt bằng cấp kỹ thuật và rất có thể, bạn sẽ bắt gặp các tệp .mat cho các bộ dữ liệu được phát hành bởi các trường đại học.

Đây là một bài viết ngắn gọn giải thích cách tải các tệp này bằng Python, ngôn ngữ phổ biến nhất cho học máy hiện nay.

Dữ liệu

Tôi muốn xây dựng một bộ phân loại để phát hiện những chiếc xe của các mô hình khác nhau và tạo ra và vì vậy bộ dữ liệu của Stanford Cars dường như là một điểm khởi đầu tuyệt vời. Đến từ học viện, các chú thích cho bộ dữ liệu ở định dạng .mat. Bạn có thể nhận được các tập tin được sử dụng trong bài đăng này ở đây.

Tải .mat tệp

Scipy là một thư viện Python thực sự phổ biến được sử dụng để điện toán khoa học và khá tự nhiên, chúng có một phương pháp cho phép bạn đọc trong các tệp .mat. Đọc chúng chắc chắn là phần dễ dàng. Bạn có thể hoàn thành nó trong một dòng mã:

from scipy.io import loadmat
annots = loadmat('cars_train_annos.mat')

Chà, nó thực sự đơn giản. Nhưng hãy để Lừa tiếp tục và thực sự cố gắng để có được dữ liệu chúng ta cần từ từ điển này.

Định dạng dữ liệu

Phương thức LoadMat trả về cấu trúc dữ liệu quen thuộc hơn, từ điển Python. Nếu chúng ta nhìn trộm các khóa, chúng ta sẽ thấy bây giờ chúng ta cảm thấy như thế nào so với việc xử lý tệp .mat:

annots.keys()
> dict_keys(['__header__', '__version__', '__globals__', 'annotations'])

Nhìn vào tài liệu cho bộ dữ liệu này, chúng tôi sẽ tìm hiểu những gì điều này thực sự được tạo ra. Readme.txt cung cấp cho chúng tôi thông tin sau:

This file gives documentation for the cars 196 dataset.
(http://ai.stanford.edu/~jkrause/cars/car_dataset.html)
— — — — — — — — — — — — — — — — — — — —
Metadata/Annotations
— — — — — — — — — — — — — — — — — — — —
Descriptions of the files are as follows:
-cars_meta.mat:
Contains a cell array of class names, one for each class.
-cars_train_annos.mat:
Contains the variable ‘annotations’, which is a struct array of length
num_images and where each element has the fields:
bbox_x1: Min x-value of the bounding box, in pixels
bbox_x2: Max x-value of the bounding box, in pixels
bbox_y1: Min y-value of the bounding box, in pixels
bbox_y2: Max y-value of the bounding box, in pixels
class: Integral id of the class the image belongs to.
fname: Filename of the image within the folder of images.
-cars_test_annos.mat:
Same format as ‘cars_train_annos.mat’, except the class is not provided.
— — — — — — — — — — — — — — — — — — — —
Submission file format
— — — — — — — — — — — — — — — — — — — —
Files for submission should be .txt files with the class prediction for
image M on line M. Note that image M corresponds to the Mth annotation in
the provided annotation file. An example of a file in this format is
train_perfect_preds.txt
Included in the devkit are a script for evaluating training accuracy,
eval_train.m. Usage is:
(in MATLAB)
>> [accuracy, confusion_matrix] = eval_train(‘train_perfect_preds.txt’)
If your training predictions work with this function then your testing
predictions should be good to go for the evaluation server, assuming
that they’re in the same format as your training predictions.

Sự quan tâm của chúng tôi là trong biến 'chú thích', vì nó chứa các nhãn lớp và hộp giới hạn của chúng tôi. Nó có một cấu trúc, một loại dữ liệu rất quen thuộc với những người đến từ một ngôn ngữ được đánh máy mạnh mẽ như hương vị của C hoặc Java.

Một chút đào sâu vào đối tượng cho chúng ta một số điều thú vị để làm việc với:

type(annots[‘annotations’]),annots[‘annotations’].shape
>(numpy.ndarray, (1, 8144))
type(annots['annotations'][0][0]),annots['annotations'][0][0].shape
>(numpy.void, ())

Các chú thích được lưu trữ ở định dạng numpy.ndarray, tuy nhiên kiểu dữ liệu cho các mục bên trong mảng này là Numpy.void và Numpy không thực sự biết hình dạng của chúng.numpy.void and numpy doesn’t really seem to know the shape of them.

Trang tài liệu cho phương thức LoadMat cho chúng tôi biết cách nó tải các cấu trúc MATLAB vào các mảng có cấu trúc numpy. Bạn có thể truy cập các thành viên của các cấu trúc bằng các khóa bằng cách sử dụng các khóa:loadmat method tells us how it loads matlab structs into numpy structured arrays.You can access the members of the structs using the keys:

annots[‘annotations’][0][0][‘bbox_x1’], annots[‘annotations’][0][0][‘fname’]> (array([[39]], dtype=uint8), array(['00001.jpg'], dtype='

Vì vậy, bây giờ chúng ta đã biết cách truy cập các thành viên của cấu trúc, chúng ta có thể lặp lại tất cả chúng và lưu trữ chúng trong một danh sách:

[item.flat[0] for item in annots[‘annotations’][0][0]]> [39, 116, 569, 375, 14, '00001.jpg']

Ở đây, chúng ta có thể sử dụng phương pháp phẳng để vắt giá trị ra khỏi mảng.

Xin chào Pandas

Bây giờ chúng ta đã biết cách đối phó với các tệp MATLAB trong Python, hãy để Lừa chuyển đổi nó thành khung dữ liệu Pandas. Chúng ta có thể làm như vậy dễ dàng bằng cách sử dụng danh sách danh sách:

data = [[row.flat[0] for row in line] for line in annots[‘annotations’][0]]columns = [‘bbox_x1’, ‘bbox_y1’, ‘bbox_x2’, ‘bbox_y2’, ‘class’, ‘fname’]
df_train = pd.DataFrame(data, columns=columns)

Cuối cùng, lãnh thổ quen thuộc!

Mã cho bài này có thể được tìm thấy ở đây.

Tôi có thể tải tệp .mat trong python không?

Theo mặc định, Python không có khả năng đọc các tệp .mat.Python is not capable of reading . mat files.

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 để mở tệp .mat trong máy tính xách tay Jupyter?

Mở Mat Python..
từ mat4py nhập loadmat ..
data = loadMat ('dataFile.mat').

Làm cách nào để mở tệp .mat mà không có matlab?

.Các tệp MAT chứa dữ liệu nhị phân, do đó bạn sẽ không thể mở chúng dễ dàng bằng trình xử lý văn bản.Có một số tùy chọn để mở chúng bên ngoài Matlab: Nếu tất cả những gì bạn cần làm là xem các tệp, bạn có thể có được Octave, đây là một triển khai MATLAB miễn phí, nhưng hơi chậm.obtain Octave, which is a free, but somewhat slower implementation of MATLAB.