Gọi hàm matlab từ python
Ngày nay, khả năng viết mã đã trở thành một kỹ năng thiết yếu trong các ngành khoa học và kỹ thuật. Dù bạn thích hay không, trong quá trình học, bạn sẽ thấy mình đang làm bài tập, giải phương trình hoặc 'bài toán' lớn hơn trong dự án của mình bằng một số loại mã hóa. Và, nếu bạn nghĩ đến việc học lên cao hơn và thực hiện một số nghiên cứu sâu rộng, thì viết mã là kỹ năng cần biết đối với bạn Show
Thông thường, sinh viên sẽ làm quen với lập trình khoa học (lưu ý rằng tôi không đề cập cụ thể đến sinh viên CS, tập trung vào viết mã và lập trình cho mục đích chung) thông qua MATLAB. Lý do đơn giản là MATLAB đã có mặt trong lĩnh vực điện toán khoa học từ lâu và nó đã trở thành một ngôn ngữ hoặc công cụ kế thừa cho cộng đồng khoa học. Các kỹ sư và nhà khoa học luôn cần một ngôn ngữ lập trình thể hiện trực tiếp toán học ma trận và mảng, và sau đó MATLAB (phòng thí nghiệm ma trận) ra đời. MATLAB là một ngôn ngữ định hướng toán học và ma trận đi kèm với các loại hộp công cụ chuyên dụng khác nhau (bạn phải trả tiền cho hộp công cụ) cho một số mục đích e. g. lập mô hình dữ liệu kinh tế, phân tích hình ảnh hoặc điều khiển robot. Các hộp công cụ này được phát triển chuyên nghiệp, kiểm tra nghiêm ngặt và được ghi lại đầy đủ cho các ứng dụng khoa học và kỹ thuật. Và đó là lý do tại sao bạn phải trả giá cho nó MATLAB có một số lượng lớn các chức năng và một tài liệu cực kỳ tốt để bắt đầu học và một cộng đồng khoa học rộng lớn đã trả lời các câu hỏi sắp được hỏi hoặc sẽ được ai đó trả lời khi bạn đăng chúng lên Trung tâm MATLAB. Có 365.000 người đóng góp, 120 câu hỏi được trả lời và 25.000 tập lệnh hoặc mã mẫu được tải xuống mỗi ngày. Nó có các hộp công cụ cho sinh học tính toán, tài chính tính toán, hệ thống điều khiển, khoa học dữ liệu, xử lý hình ảnh và thị giác máy tính, học máy, mô hình hóa và mô phỏng vật lý, người máy, xử lý tín hiệu và truyền thông và IOT Mặt khác, chúng ta có Python, một ngôn ngữ lập trình trẻ hơn nhiều, có lịch sử về các gói máy tính khoa học, e. g. 3, 4, chưa bị lỗi thời. Hơn nữa, trong Python, bạn thường phải dựa vào các gói do cộng đồng tạo ra để sử dụng trong khoa học và kỹ thuật. Gọi Python là giải pháp thay thế cho MATLAB về mặt kỹ thuật là không chính xác. Đây là ngôn ngữ lập trình có mục đích chung, mà bạn có thể phát triển các ứng dụng và công cụ phần mềm chính thức cũng như để tạo các ứng dụng bằng bất kỳ thư viện GUI chính nào (e. g. Qt), sử dụng OpenGL, điều khiển cổng USB của bạn, v.v.Là một ngôn ngữ lập trình cấp cao, đa nền tảng, đa năng và miễn phí, rất nhiều người hiện đang sử dụng Python. Các IDES như pycharm, ipython notebook, jupyter notebook và các bản phân phối như anaconda đã làm cho python trở nên hữu dụng hơn rất nhiều đối với các nhà nghiên cứu. Do sự phổ biến này, rất nhiều gói khoa học Python đã có sẵn với tài liệu mở rộng để trực quan hóa dữ liệu, học máy, xử lý ngôn ngữ tự nhiên, phân tích dữ liệu phức tạp, v.v. Ví dụ: scikit-learning bao gồm các phương pháp tiếp cận 'Machine Learning' tiên tiến nhất với tài liệu và hướng dẫn rất tốt Đôi khi, việc lựa chọn giữa MATLAB và Python là vấn đề cá nhân hoặc có thể là do nhiệm vụ cụ thể. Những lần khác, bạn có thể buộc phải chọn Python. Cá nhân tôi, có một số vấn đề cơ bản khiến tôi phải tìm kiếm một giải pháp thay thế cho MATLAB. Tôi nghĩ vấn đề cơ bản nhất với Matlab là bản chất thương mại của nó và đây là cơ sở cho một số vấn đề
Tất nhiên, Matlab cũng có những ưu điểm của nó
Điểm cuối cùng thậm chí còn quan trọng hơn nếu bạn xem xét khả năng bạn làm việc trong lĩnh vực nghiên cứu học thuật. Không có khả năng đồng nghiệp của bạn quen sử dụng MATLAB hơn Python, hoặc mã ví dụ về các hàm được phát hành cùng với các bài báo nghiên cứu đã xuất bản sẽ được viết bằng MATLAB. Hơn nữa, MATLAB hỗ trợ viết hàm phức tạp (và tốn kém về mặt tính toán) trong các tệp nguồn C/C++, sau này được biên dịch ở định dạng nhị phân độc quyền có tên là MEX Mẩu chuyện dài
Nếu bạn nhận ra mình thuộc một trong các loại trước đó, trong phần còn lại của bài đăng này, chúng ta sẽ xem một số chiến lược bạn có thể sử dụng để gọi các hàm MATLAB từ mã Python của bạn, theo cách mà chúng sẽ hoạt động giống như mã Python gốc API MATLAB cho PythonĐối với MATLAB® Engine API cho Python®, bạn sẽ cần cài đặt một bản sao MATLAB trong hệ thống của mình. Theo như tôi biết thì không có cách giải quyết nào cho vấn đề này và đây là hậu quả của việc MATLAB là một phần mềm độc quyền. API này hỗ trợ hầu hết mọi phiên bản Python và yêu cầu cài đặt CPython trên hệ thống của bạn để sử dụng tham chiếu đầu vào và đầu ra cần thiết để trao đổi đối số giữa hai thế giới Nếu bạn đáp ứng các yêu cầu này, việc cài đặt API rất đơn giản và nó được thực hiện như cách bạn làm với mọi thư viện mã nguồn Python. Trên Linux có vẻ như thế này
trong đó matlabroot là đường dẫn mà bạn đã cài đặt MATLAB trên hệ thống của mình Đó là nó API cung cấp gói Python có tên 5 cho phép bạn gọi các hàm MATLAB từ Python. Bạn cài đặt gói một lần và sau đó bạn có thể gọi công cụ trong các phiên Python hiện tại hoặc tương lai của mình. Bạn có thể nhập gói mới cài đặt này bằng cách nhập gói đó vào phiên Python hiện tại của mình
NẾU bạn muốn tách biệt mọi thứ và bạn cần có các phiên/không gian làm việc khác nhau cho MATLAB, trong workflor của bạn, bạn có thể chỉ cần khởi động nhiều công cụ, các công cụ này sẽ không giao tiếp với nhau
Để dừng một công cụ matlab, bạn có thể thoát khỏi phiên Python hiện tại của mình hoặc bắt chính công cụ đó một cách rõ ràng
Gọi các hàm MATLAB (tích hợp sẵn) từ PythonBạn có thể gọi trực tiếp bất kỳ hàm MATLAB nào và trả kết quả về Python. Điều này duy trì miễn là hàm có thể được tìm thấy trong đường dẫn của MATLAB (chúng ta sẽ sớm quay lại vấn đề này) Ví dụ, để xác định xem một số có phải là số nguyên tố hay không, hãy sử dụng công cụ để gọi hàm 6
Đây là một trong những đơn giản. hàm MATALB mà chúng tôi gọi là chỉ tạo ra một đầu ra và đó là đầu ra 'vô hướng' (thực ra là boolean), không phải là một mảng của một số loại Khi bạn gọi một hàm với công cụ, theo mặc định, công cụ sẽ trả về một đối số đầu ra duy nhất. Nếu bạn biết rằng hàm có thể trả về nhiều đối số, bạn sẽ cần sử dụng đối số 7 để chỉ định số lượng đối số đầu raVí dụ: để xác định mẫu số chung lớn nhất của hai số, hãy sử dụng hàm 8, bằng cách đặt 7 để trả về ba đối số đầu ra từ 8 4 5Chuyển các biến từ Python sang không gian làm việc MATLABKhi bạn khởi động công cụ, nó sẽ cung cấp giao diện cho tập hợp tất cả các biến MATLAB. Bộ sưu tập này, được đặt tên là không gian làm việc, được triển khai dưới dạng từ điển Python được gắn vào công cụ
Bạn có thể thêm các biến vào không gian làm việc của engine trong Python, sau đó bạn có thể sử dụng các biến trong các hàm MATLAB 6 7Trong ví dụ này, x chỉ tồn tại dưới dạng biến Python. Giá trị của nó được gán cho một mục mới trong không gian làm việc của động cơ, được gọi là y, tạo một biến MATLAB. Sau đó, bạn có thể gọi hàm MATLAB 1 để thực thi câu lệnh 2 trong MATLAB và trả về giá trị đầu ra, 2. 0, sang PythonSử dụng Mảng MATLAB trong PythonThông thường, khi làm việc với MATLAB, chúng ta quan tâm đến việc thực hiện các thao tác phức tạp trên mảng. Gói 5 cung cấp hàm tạo để tạo mảng MATLAB trong Python. API Công cụ MATLAB cho Python có thể chuyển các mảng đó làm đối số đầu vào cho các hàm MATLAB và có thể trả về các mảng đó làm đối số đầu ra cho PythonBạn có thể tạo các mảng của bất kỳ kiểu số hoặc logic MATLAB nào từ các kiểu chuỗi Python, như sau 0 1Công cụ trả về b, là một mảng 1-by-5 4Điều tương tự cũng áp dụng nếu chúng ta muốn tạo một mảng nhiều chiều. Hàm 5 trả về matlab 2-D. mảng kép sang Python 2 3Thật không may, gói 5 dường như chỉ hoạt động với các cấu trúc dữ liệu Python thuần túy, có nghĩa là chúng ta sẽ cần sử dụng một số thủ thuật nếu muốn làm việc với, e. g. , 7 mảng. Điều này rất quan trọng, vì thông thường nếu chúng ta cần gọi một hàm MATLAB để hoạt động trên mảng, đó là bởi vì trong Python chúng ta đang làm việc với mảng và điều này thường được thực hiện thông qua _______ 87Hãy xem điều gì sẽ xảy ra 4 5Chúng tôi đã tạo một mảng 7 a, sau đó chúng tôi tính bình phương của từng giá trị của nó, tạo ra một mảng 7 khácNếu chúng tôi cố gắng tạo lại thao tác này bằng gói 5, chúng tôi sẽ gặp lỗi ngay khi chúng tôi cố gắng truyền mảng 7 a dưới dạng matlab. mảng kép 6 7Điều này xảy ra vì matlab. chức năng kép đang mong đợi một danh sách hoặc một bộ dữ liệu làm đầu vào và nó không thể hiểu được numpy. kiểu dữ liệu ndarray Một cách giải quyết là quay lại định dạng danh sách 8 9Có những vấn đề bổ sung mà chúng ta cần phải đối mặt ở đây. đầu ra được tạo bởi lệnh gọi hàm MATLAB luôn là kiểu os matlab. cá sấu. Điều này rất hữu ích nếu nó là điểm cuối của quá trình tính toán của chúng ta, nhưng nếu chúng ta cần thực hiện các thao tác khác (bằng Python) trên đầu ra của hàm MATLAB, thì định dạng này nếu ít hoặc không sử dụng đối với chúng ta Nếu chúng ta muốn đúng, matlab. mlarray được xem gần như là một danh sách trong Python. Các hoạt động cơ bản được hỗ trợ, nhưng ngay cả các lỗi ném chuyển đổi hoặc định hình lại. Để khắc phục hạn chế này, chúng ta có thể viết lại đầu ra dưới dạng mảng có nhiều mảng * 0 1Điều này cũng có thể được thực hiện trong một dòng mã 2____51Gọi các tập lệnh và hàm người dùng MATLAB tùy chỉnh từ PythonCho đến giờ, chúng ta đã thấy cách chúng ta có thể sử dụng 3 để gọi các hàm MATLAB tích hợp để thực hiện một số phép tính trên dữ liệu và các chiến lược để chuyển dữ liệu từ phiên Python sang không gian làm việc MATLABĐây là điều mà chúng tôi rất quan tâm. Thông thường, chúng tôi sẽ tìm cách chạy mã MATLAB tùy chỉnh, mã này có thể thuộc các loại khác nhau
Hãy bắt đầu với một ví dụ rất cơ bản và giả sử rằng, một lần nữa chúng ta muốn tính toán sức mạnh của một mảng Chúng ta có thể sử dụng mã MATLAB sau 4Trong thư mục hiện tại của bạn, sao chép mã MATLAB này vào tệp có tên pow_script. m Sau khi bạn lưu tệp, chúng ta có thể gọi nó từ bên trong Python như thế này 5 6____57 8Chỉ định 4 là bắt buộc. Mặc dù tập lệnh in đầu ra, nhưng nó không trả về đối số đầu ra nào cho PythonNgoài ra (và theo ý kiến của tôi thú vị hơn), chúng ta có thể chuyển đổi tập lệnh thành hàm và gọi hàm từ công cụ 9Tất cả những cân nhắc đã thực hiện trước đó vẫn hợp lệ đối với chức năng người dùng tùy chỉnh 0 1 2Và rõ ràng điều này cũng sẽ cho phép chúng ta sử dụng hàm MEX phức tạp trong Python, chuyển các mảng Python làm đầu vào và nhận đầu ra trực tiếp dưới dạng các biến Python (hoặc mảng 7)
Tôi có thể gọi hàm MATLAB từ Python không?Có hai cách để gọi mã MATLAB từ Python. Đầu tiên là sử dụng API Công cụ MATLAB cho Python, yêu cầu cài đặt MATLAB . Thứ hai là sử dụng SDK trình biên dịch MATLAB để biên dịch gói Python không yêu cầu người dùng phải cài đặt MATLAB.
Làm cách nào để chạy MATLAB bằng Python?Khởi động Công cụ MATLAB cho Python . Khởi động Python® tại dấu nhắc của hệ điều hành nhập matlab. gói công cụ vào phiên Python của bạn Bắt đầu một quy trình MATLAB® mới bằng cách gọi start_matlab. Hàm start_matlab trả về một đối tượng Python eng cho phép bạn truyền dữ liệu và gọi các hàm do MATLAB thực thi Làm cách nào để chạy mã MATLAB bằng Python mà không cần MATLAB?Tóm lại. bạn không thể . Bạn cần có bản cài đặt MATLAB được cấp phép, đang hoạt động, bản cài đặt này sẽ được gọi ở chế độ nền. Nếu không có bản cài đặt MATLAB hoạt động, được cấp phép, bạn không thể chạy mã MATLAB.
Tôi có thể chạy mã MATLAB trong Pycharm không?Hiển thị hoạt động trên bài đăng này. Tôi đã chạy thành công mã MATLAB trên Pycharm, hãy để chính. py là tệp python chính của bạn bắt đầu dự án python. bạn cần đặt các tệp matlab được gọi vào cùng một thư mục '. /' của chính. py khởi động chương trình và bên trong chính. py bạn cần nhập động cơ. nhập matlab . |