Việc triển khai MATLAB thường khá đáng tin cậy vì nó được phát triển bởi các chuyên gia. Nhưng những lợi thế của việc sử dụng Python là vô cùng lớn. Trong bài đăng này, tôi sẽ trình bày cách bạn có thể tích hợp hàm MATLAB tùy chỉnh vào tập lệnh Python của mình
Hình ảnh của Gerd Altmann từ PixabayXác định chức năng tùy chỉnh trong MATLAB
Hãy để chúng tôi tạo một hàm tùy chỉnh trong MATLAB mà chúng tôi có thể sử dụng trong Python. Để trình diễn, tôi sẽ sử dụng một hàm cơ bản, nhưng ý tưởng tương tự cũng áp dụng cho bất kỳ hàm nào
Giá trị riêng và vectơ riêng trong MATLAB
function [V,D] = eigFunc[A]
%returns diagonal matrix D of eigenvalues and matrix V
% whose columns are the corresponding right eigenvectors,
% so that A*V = V*D.
[V, D] = eig[A];
end
Tôi đã lưu chức năng trên là eigFunc
. Hàm này lấy một ma trận vuông làm ma trận đường chéo đầu vào và đầu ra D
của các giá trị riêng và ma trận
clear; close all; clc
A = gallery['lehmer',4];
[V,D] = eigFunc[A]
0 có các cột là các vectơ riêng bên phải tương ứng [ xem hàm eig trong MATLAB]Trước tiên hãy sử dụng chức năng này trong MATLAB cho mục đích thử nghiệm
clear; close all; clc
A = gallery['lehmer',4];
[V,D] = eigFunc[A]
Điều này trả về
V =
0.0693 -0.4422 -0.8105 0.3778
-0.3618 0.7420 -0.1877 0.5322
0.7694 0.0486 0.3010 0.5614
-0.5219 -0.5014 0.4662 0.5088
D =
0.2078 0 0 0
0 0.4078 0 0
0 0 0.8482 0
0 0 0 2.5362
Hàm này hoạt động xuất sắc trong MATLAB như mong đợi [vì hàm này là bản sao chính xác của hàm
clear; close all; clc
A = gallery['lehmer',4];
[V,D] = eigFunc[A]
1 trong MATLAB. Nhưng làm thế nào chúng ta có thể sử dụng chức năng này trong Python?Gọi MATLAB bằng PythonSử dụng API công cụ MATLAB cho Python
Cách dễ nhất để sử dụng hàm MATLAB trong Python là sử dụng hàm
clear; close all; clc
A = gallery['lehmer',4];
[V,D] = eigFunc[A]
2. Bạn có thể cài đặt thư viện clear; close all; clc
A = gallery['lehmer',4];
[V,D] = eigFunc[A]
3 bằng cách làm theo hai cách sauCài đặt từ bên trong MATLAB
cd [fullfile[matlabroot,'extern','engines','python']]
system['python setup.py install']
Cài đặt trực tiếp từ thiết bị đầu cuối
Điều hướng đến vị trí nguồn MATLAB và biên dịch python
________số 8_______Xin lưu ý rằng API công cụ MATLAB này sẽ được cài đặt cho phiên bản cụ thể của
clear; close all; clc
A = gallery['lehmer',4];
[V,D] = eigFunc[A]
4. Nếu bạn đang sử dụng anaconda, bạn có thể kiểm tra phiên bản Python mà bạn đang cài đặt API công cụ MATLAB cho. Về cơ bản, nó giống như cách bạn cài đặt các thư viện Python khác. Chi tiết truy cập tại đâyimport matlab
import matlab.engine
eng = matlab.engine.start_matlab[]
A = [[1.0000, 0.5000, 0.3333, 0.2500],
[0.5000, 1.0000, 0.6667, 0.5000],
[0.3333, 0.6667, 1.0000, 0.7500],
[0.2500, 0.5000, 0.7500, 1.0000]]
A = matlab.double[A]
V, D = eng.eigFunc[A, nargout=2]
print["V: ", V]
print["D: ", D]
eng.quit[]
Đây là đầu ra
V: [[0.06939950784450351,-0.4421928183150595,-0.8104910184495989,0.37782737957175255], [-0.3619020163563876,0.7419860358173743,-0.18770341448628555,0.5322133795757004],[0.7693553355549393,0.04873539080548356,0.30097912769034274,0.5613633351323756],[-0.5218266058004974,-0.5015447096377744,0.4661365700065611,0.5087893432606572]]
D: [[0.20775336892808516,0.0,0.0,0.0],[0.0,0.40783672775946245,0.0,0.0],[0.0,0.0,0.8482416513967358,0.0],[0.0,0.0,0.0,2.536168251915717]]
Kết quả vẫn giống như trước đây. Đối số
clear; close all; clc
A = gallery['lehmer',4];
[V,D] = eigFunc[A]
5 báo cho hàm dựa trên matlab xuất ra kết quả clear; close all; clc
A = gallery['lehmer',4];
[V,D] = eigFunc[A]
6 tại đâyTạo gói Python. Sử dụng Trình biên dịch MATLAB & Thời gian chạy MATLABĐiều này hoàn toàn tốt nếu bạn đã cài đặt MATLAB trong hệ thống của mình. Nhưng nếu bạn muốn đưa tập lệnh Python của mình cho người chưa cài đặt MATLAB trên hệ thống của họ thì sao?. Trong trường hợp đó, bạn có thể xây dựng thư viện Python bằng ứng dụng
clear; close all; clc
A = gallery['lehmer',4];
[V,D] = eigFunc[A]
7 trong MATLAB. Để biết chi tiết, hãy truy cập Tạo Gói Python và Xây dựng Ứng dụng Python[a] Chọn hàm MATLAB để tạo thư viện Python [b] Thêm tập lệnh MATLAB mẫu [Ảnh của tác giả]
[a] Nhấp vào
clear; close all; clc
A = gallery['lehmer',4];
[V,D] = eigFunc[A]
8 để tạo thành phần độc lập [b] Đợi tác vụ hoàn thành [Ảnh của tác giả]Cài đặt thời gian chạy MATLAB
Xin lưu ý rằng người dùng cần cài đặt thời gian chạy MATLAB để sử dụng thành công thư viện này. Thời gian chạy MATLAB giúp chạy các ứng dụng hoặc thành phần MATLAB đã biên dịch mà không cần cài đặt MATLAB. Có thể tải xuống thời gian chạy từ đây cho HĐH Windows, Mac và Linux và tải xuống miễn phí
Nhập thư viện dựa trên MATLAB cho Python
import eigFunc
eigFuncAnalyzer = eigFunc.initialize[] #calls the matlab runtime
A = [[1.0000, 0.5000, 0.3333, 0.2500],
[0.5000, 1.0000, 0.6667, 0.5000],
[0.3333, 0.6667, 1.0000, 0.7500],
[0.2500, 0.5000, 0.7500, 1.0000]]
A = array.array[A] %not tested
V, D = eigFuncAnalyzer.eigFunc[A, nargout=2]
print["V: ", V]
print["D: ", D]
eigFuncAnalyzer.terminate[]
Xin lưu ý rằng bạn có thể thiết kế
clear; close all; clc
A = gallery['lehmer',4];
[V,D] = eigFunc[A]
9 của mình theo cách mà bạn có thể tải dữ liệu mat một cách đơn giản và bạn có thể sử dụng hàm V =
0.0693 -0.4422 -0.8105 0.3778
-0.3618 0.7420 -0.1877 0.5322
0.7694 0.0486 0.3010 0.5614
-0.5219 -0.5014 0.4662 0.5088
D =
0.2078 0 0 0
0 0.4078 0 0
0 0 0.8482 0
0 0 0 2.5362
0 để lưu dữ liệu python sang định dạng mat. Để biết chi tiết, hãy xem tài liệu scipy