Meg là một mô-đun Python để giao tiếp với công cụ MATLAB, cho phép truyền dữ liệu giữa Python và MATLAB và gọi mã MATLAB từ Python
Giả sử bạn có thể chạy matlab từ dòng lệnh (i. e. tệp thực thi MATLAB chính nằm trong PATH của bạn), sử dụng Meg đơn giản như
import meg import numpy with meg.Engine() as engine: data = numpy.empty((4,3)) # Copy Python data to the engine engine["data"] = data # Execute MATLAB instructions engine("count = numel(data)") # Get data from MATLAB print(engine["count"])Meg có thể được cài đặt như bất kỳ gói Python nào. tải phiên bản ổn định mới nhất từ PyPi bằng cách sử dụng pip (e. g. python3 -m pip install meg) hoặc sao chép mã nguồn và thêm nó vào đường dẫn Python của bạn
Kết nối với MATLAB
Công việc chính của Meg là đối tượng import meg with meg.Engine() as engine: # Interact with MATLAB pass # Once we reach this point, the engine has been automatically stopped. 0. nó phải được bắt đầu trước khi gửi dữ liệu giữa Python và MATLAB. Một động cơ có thể được khởi động (và tự động dừng) bằng cú pháp sau
import meg with meg.Engine() as engine: # Interact with MATLAB pass # Once we reach this point, the engine has been automatically stopped.Lưu ý rằng khi một động cơ bị dừng, tất cả dữ liệu được lưu trữ bên trong chưa được chuyển sang Python sẽ bị mất
Cũng có thể tự khởi động và dừng động cơ
import meg # Create the engine, but do not start it engine = meg.Engine() engine.open() # Interact with MATLAB engine.close()Đối với môi trường phức tạp hơn (e. g. nhiều phiên bản MATLAB, không thể thực thi được trong PATH, v.v. ), có thể chỉ định thư mục gốc của cài đặt MATLAB mục tiêu của bạn và lệnh rõ ràng để chạy khi khởi động động cơ
import meg # Target a specific installation of MATLAB meg.setup("/opt/MATLAB/R2012b") # Start the engine with a non-default command with meg.Engine("/opt/MATLAB/R2012b/bin/matlab -nosplash") as engine: passNhận dữ liệu đến và từ MATLAB
Dữ liệu có thể được trao đổi giữa Python và MATLAB bằng cách sử dụng đối tượng import meg with meg.Engine() as engine: # Interact with MATLAB pass # Once we reach this point, the engine has been automatically stopped. 0. để lưu trữ nội dung của tên đối tượng Python import meg with meg.Engine() as engine: # Interact with MATLAB pass # Once we reach this point, the engine has been automatically stopped. 2 trong đối tượng MATLAB có tên là import meg with meg.Engine() as engine: # Interact with MATLAB pass # Once we reach this point, the engine has been automatically stopped. 3, chỉ cần viết import meg with meg.Engine() as engine: # Interact with MATLAB pass # Once we reach this point, the engine has been automatically stopped. 0. Thao tác ngược lại (lưu nội dung của đối tượng MATLAB có tên là import meg with meg.Engine() as engine: # Interact with MATLAB pass # Once we reach this point, the engine has been automatically stopped. 3 sang đối tượng Python có tên là import meg with meg.Engine() as engine: # Interact with MATLAB pass # Once we reach this point, the engine has been automatically stopped. 2), viết import meg with meg.Engine() as engine: # Interact with MATLAB pass # Once we reach this point, the engine has been automatically stopped. 3
Các số (và vùng chứa số) được dịch nguyên trạng giữa MATLAB và Python. Từ Python, các mảng danh sách, bộ dữ liệu và numpy sẽ được chuyển đổi thành mảng số MATLAB;
Từ Python, các vùng chứa không đồng nhất (danh sách, bộ dữ liệu hoặc mảng có nhiều mảng chứa đối tượng thuộc các loại khác nhau) sẽ được chuyển đổi thành mảng ô MATLAB;
Từ Python, từ điển và mảng numpy có cấu trúc được chuyển đổi thành mảng cấu trúc MATLAB và điều tương tự cũng áp dụng cho chuyển đổi ngược lại
Gọi mã MATLAB
Các câu lệnh MATLAB được chạy bằng cách gọi đối tượng engine. giả sử bạn đã lưu trữ một đối tượng có tên là import meg with meg.Engine() as engine: # Interact with MATLAB pass # Once we reach this point, the engine has been automatically stopped. 4 trong MATLAB, việc tính toán số phần tử trong đó được thực hiện thông qua import meg with meg.Engine() as engine: # Interact with MATLAB pass # Once we reach this point, the engine has been automatically stopped. 5. Lưu ý rằng các đối tượng không được trao đổi tự động giữa Python và MATLAB. chúng phải được lưu trữ rõ ràng trong công cụ MATLAB trước khi sử dụng chúng trong mã MATLAB
Trong khi làm đồ án, tôi nhận ra rằng nếu chúng ta có thể kết hợp MATLAB với Python thì việc xử lý hình ảnh sẽ trở nên dễ dàng. Vì vậy, tôi bắt đầu tìm kiếm trên internet để xem liệu chúng tôi có thể làm điều đó hay không, đó là nơi tôi biết rằng có thể sử dụng API MATLAB có tên là MATLAB Engine
Trong blog này, tôi sẽ giúp bạn bằng cách hướng dẫn bạn quy trình cài đặt và sử dụng API này
điều kiện tiên quyết
- Phiên bản MATLAB phải cao hơn R2014b
- Kiểm tra xem bạn đã cài đặt phiên bản Python tương thích với MATLAB chưa
- Đặt đường dẫn của Python, nếu chưa thực hiện trước đó
- Tìm đường dẫn đến thư mục MATLAB. Bạn có thể làm điều này bằng cách viết matlabroot trong cửa sổ lệnh của MATLAB. Sao chép đường dẫn này
Các bước cài đặt API
Cài đặt trên Windows
- Mở dấu nhắc lệnh
- viết lệnh. cd “matlabroot\extern\engines\python”. Ghi chú. sử dụng địa chỉ matlabroot thay vì matlabroot
- loại tiếp theo. thiết lập python. cài đặt py
Cài đặt trên Mac hoặc Linux
- Mở thiết bị đầu cuối
- viết lệnh. cd “matlabroot/extern/engine/python”. Ghi chú. sử dụng địa chỉ matlabroot thay vì matlabroot
- loại tiếp theo. thiết lập python. cài đặt py
Cài đặt trên MATLAB
- Đi đến cửa sổ lệnh và gõ lệnh. cd (fullfile(matlabroot, ‘extern’, ‘engines’, ‘python’)). Ghi chú. sử dụng địa chỉ matlabroot thay vì matlabroot
- loại tiếp theo. hệ thống ('thiết lập trăn. cài đặt py')
- Nhập công cụ MATLAB. nhập matlab. động cơ
- Khai báo một biến để khởi động động cơ. tiếng anh = matlab. động cơ. start_matlab()
- Gửi hình ảnh tới MATLAB, sử dụng lệnh sau. tiếng anh. tên_của_matlab_file(hình ảnh)
Mẹo. Chuyển đổi tệp matlab của bạn thành một hàm, lấy hình ảnh làm đối số. Không sử dụng trình biên dịch python trực tuyến cho việc này. Tôi muốn giới thiệu Visual Studio và Jupyter Notebook
Vì vậy, đó là tất cả từ phía tôi. Tôi hy vọng nó sẽ giúp bạn. Tôi viết blog này để những người khác không gặp phải những khó khăn mà tôi gặp phải khi sử dụng MATLAB Engine