matlab2python
Một tập lệnh Python để chuyển đổi các tệp hoặc dòng mã MATLAB thành Python. Dự án này là trong giai đoạn alpha. Việc thực hiện này phụ thuộc rất nhiều vào dự án Smop của Victor Leikehman. Việc thực hiện hiện tại bao quanh SMOP, với những khác biệt sau:
- Nó cố gắng tạo ra mã không dựa vào
libsmop
, mà chỉ trên các mô -đun Python thông thường nhưnumpy
. - Nó sử dụng các phím tắt điển hình như
np
thay vìnumpy
. - Nó cố gắng làm lại mảng và vòng lặp, bắt đầu từ 0 thay vì 1.
- Nó không sử dụng các lớp bên ngoài
matlabarray
vàcellarray
từlibsmop
- Hỗ trợ cơ bản cho các lớp MATLAB được thêm vào. Các thuộc tính được khai báo trong phần thân của lớp được khởi tạo trong hàm tạo.
- Do hậu quả của tất cả những điều trên, mã kết quả là "kém an toàn" nhưng có thể gần hơn một chút với những gì người dùng sẽ viết.
Việc triển khai này được thực hiện đơn giản, vì về cơ bản nó sử dụng một tập lệnh phụ trợ khác so với bản được sử dụng bởi SMOP, ở đây được gọi là smop\backend_m2py.py
. Một số thay thế chức năng đã được thêm trực tiếp ở đó. Hỗ trợ bổ sung cho các lớp, mô-đun nhập và các thay thế tinh chỉnh khác [hoặc hack ...] được thực hiện trong tệp ____10.
Cài đặt
Mã được viết bằng Python, bạn có thể truy cập nó như sau:
git clone //github.com/ebranlard/matlab2python
cd matlab2python
python -m pip install --user -r requirements.txt
Cách sử dụng
Kịch bản chính ở gốc của kho lưu trữ có thể thực thi và có một vài cờ dòng lệnh [một số trong số chúng được lấy trực tiếp từ SMOP]. Để chuyển đổi tệp
python matlab2python.py file.m -o file.py1 thành
python matlab2python.py file.m -o file.py2, chỉ cần nhập:
python matlab2python.py file.m -o file.py
Gói Python cũng có thể được sử dụng trực tiếp để thực hiện chuyển đổi các tệp hoặc dòng mã.
Tôi có nên sử dụng cái này không
Nếu bạn cần một tập lệnh thực hiện các chuyển đổi rõ ràng từ Matlab sang Python,
python matlab2python.py file.m -o file.py3 hy vọng sẽ hoạt động cho bạn. Ví dụ, các chuyển đổi này là:
- Cú pháp [
python matlab2python.py file.m -o file.py
4,python matlab2python.py file.m -o file.py
5,python matlab2python.py file.m -o file.py
6,python matlab2python.py file.m -o file.py
7, không cònpython matlab2python.py file.m -o file.py
8] - vết lõm
- ngoặc đơn cho dấu ngoặc
- Thay thế các chức năng xây dựng đơn giản [
python matlab2python.py file.m -o file.py
9,libsmop
0,libsmop
1,libsmop
2] - Thay thế đơn giản như
libsmop
3 thànhlibsmop
4, hoặclibsmop
5, thànhlibsmop
6 - Các chức năng linh tinh khác như
libsmop
7,libsmop
8,libsmop
9 được thay thế bằng con trăn của họ, - vân vân
Như đã đề cập ở trên, SMOP thực hiện một công việc tuyệt vời để sản xuất mã an toàn. Tuy nhiên, cả numpy
0 và
python matlab2python.py file.m -o file.py3 sẽ không tạo ra mã sẵn sàng sản xuất [trong một số trường hợp có thể]. Hầu hết thời gian, người dùng sẽ phải thông qua mã và thực hiện điều chỉnh và một số viết lại. Trên thực tế,
python matlab2python.py file.m -o file.py3 có thể sẽ tồi tệ hơn một chút so với SMOP trong việc tạo ra một mã hoạt động ra khỏi hộp. Nhưng cuối cùng, mã được tạo bởi
python matlab2python.py file.m -o file.py3 nên yêu cầu ít tái cấu trúc hơn và giúp người dùng chuyển đổi. Như được đề cập bởi tác giả của SMOP, thật khó để không che giấu hương vị MATLAB khỏi mã được tạo ra và cũng khó chuyển đổi hoàn toàn mã mà không giới thiệu các lớp được bọc như vậy
matlabarray
. Việc thực hiện python matlab2python.py file.m -o file.py3 cố gắng để làm điều đó, với giá ít an toàn hơn.
Tôi đã viết tập lệnh trình bao bọc này cho nhu cầu của riêng tôi. Tôi đã sẵn sàng để chuyển đổi thủ công một loạt các tập lệnh MATLAB, nhưng tôi nghĩ rằng tôi có thể có một kịch bản để tự động hóa một số chuyển đổi và định dạng đơn giản. Tôi bắt đầu một triển khai nhanh chóng và bẩn thỉu trước khi khám phá numpy
0. Cuối cùng, tôi đã hợp nhất sự suy yếu nhanh chóng và bẩn thỉu của mình với khung phân tích cú pháp mạnh mẽ hơn được sử dụng bởi SMOP. Hy vọng rằng điều này có thể hữu ích cho người khác! Nếu vậy, hãy thoải mái đóng góp.
Đóng góp
Bất kỳ đóng góp cho dự án này đều được chào đón! Nếu bạn thấy dự án này hữu ích, bạn cũng có thể mua cho tôi một ly cà phê [quyên góp một lượng nhỏ] với liên kết dưới đây: