OMPC nhằm mục đích cho phép sử dụng lại cơ sở mã mở và miễn phí khổng lồ của MATLAB® trên nền tảng Python miễn phí và phát triển nhanh hơn. Chạy Python và MATLAB® trong một trình thông dịch duy nhất sẽ tránh được các sự cố khi chạy hai ứng dụng riêng biệt. Python thêm các thư viện lập trình mục đích chung vào cú pháp thuận tiện của ngôn ngữ máy tính kỹ thuật
phụ thuộc. Python, OMPC sử dụng PLY và Byteplay, nhưng chúng được phân phối cùng với mã nguồn
Phụ thuộc Python. ctypes [dành cho phiên bản Python < 2. 5], cho OMPClib. numpy, scipy, matplotlib [pylab] và có thể những thứ khác
Hệ điều hành được hỗ trợ. tất cả các nền tảng hỗ trợ Python, ctypes, numpy, scipy, matplotlib[pylab]
cấp phép. OMPC và tất cả các ví dụ là một phần của trang web OMPC được cấp phép theo giấy phép kiểu BSD
Làm thế nào nó hoạt động
OMPC cho phép chạy m-file của MATLAB® bằng trình thông dịch Python. OMPC đọc các tệp m và dịch chúng thành mã tương thích với Python. Giống như trong ví dụ sau
hàm [s,varargout] = mysize[x]
% kích thước với varargout
nout = max[nargout,1]-1;
s = kích thước [x];
với k=1. nout, vararout[k] = {s[k]};
@mfunction["s", "varargout"]
xác định kích thước của tôi [x]
"""kích thước với varargout"""
nout = max[nargout,1] - 1
s = kích thước[x]
cho k trong m_[1. không]
đầu ra[k]. giá trị = mcell[s[k]]
OMPC không phải là trình thông dịch, nó cho phép Python thực hiện công việc. Điều này có nghĩa là nếu Python nhanh hơn thì OMPC cũng sẽ nhanh hơn. OMPC dịch các tệp m bảo tồn cấu trúc của các chương trình gốc càng nhiều càng tốt. Mặc dù OMPC đi kèm với một thư viện mô phỏng các tính năng của MATLAB's® mảng số không có gì có thể ngăn bạn chạy mã đã dịch theo cách bạn muốn. Điều này có nghĩa là bạn có thể chạy mã do OMPC tạo ra trên IronPython, Jython, PyPy hoặc bất kỳ thứ gì khác nếu bạn viết lớp số của riêng mình
Tất cả điều kỳ diệu được tạo ra bởi những người trang trí trăn và nội quan. Xem phần ví dụ để biết cách có thể mô phỏng các biến ẩn như nargin/nargout và các khía cạnh động khác của công cụ MATLAB® không có sẵn trong Python
Nhà phát triển, người thử nghiệm và yêu cầu tính năng
Nếu bạn muốn hiểu thêm về cách thức hoạt động của OMPC hoặc bạn muốn đóng góp theo bất kỳ cách nào cho sự phát triển, hãy xem các trang tài liệu dành cho nhà phát triểnĐóng góp được hoan nghênh dưới mọi hình thức. Bất kỳ ai cũng có thể đóng góp bằng cách thử nghiệm. Sự phát triển được thúc đẩy bởi thử nghiệm và nhu cầu. Đối với thư viện chức năng hoặc hộp công cụ nếu bạn thích, dự án OMPC không sử dụng bất kỳ công cụ theo dõi lỗi tinh vi và có thể phức tạp nào. Lý do không sử dụng theo dõi lỗi phổ biến là sự phát triển dựa trên sự đóng góp của những người không phải là lập trình viên
MATLAB® là thương hiệu đã đăng ký của The MathWorks, Inc
"Python" và các logo Python là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Python Software Foundation
Tập lệnh python để chuyển đổi tệp matlab hoặc dòng mã matlab sang python. Dự án này đang trong giai đoạn alpha. Việc triển khai này phụ thuộc rất nhiều vào dự án SMOP của Victor Leikehman. Việc triển khai hiện tại xoay quanh SMOP, với những điểm khác biệt sau
- Nó cố gắng tạo mã không dựa trên
libsmop
, mà chỉ dựa trên các mô-đun python thông thường, chẳng hạn 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ập chỉ mục lại các 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 tất cả những điều trên, mã kết quả là "kém an toàn hơn" nhưng có thể hơi gần 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 với tập lệnh được sử dụng bởi SMOP, ở đây được gọi là
python path/to/matlab2python.py file.m -o file.py0. Một số thay thế chức năng đã được thêm trực tiếp vào đó. Hỗ trợ bổ sung cho các lớp, nhập mô-đun và thay thế tinh chỉnh khác [hoặc hack. ] được thực hiện trong tệp
python path/to/matlab2python.py file.m -o file.py1
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 # install dependencies python -m pip install --user -r requirements.txt # make the packages available from any directory python -m pip install -e . #Optional: run tests pytest #Optional: try it directly python matlab2python.py tests/files/fSpectrum.m -o fSpectrum.py
Cách sử dụng
kịch bản chính
Tập lệnh chính ở thư mục gốc của kho lưu trữ có thể thực thi được và có một vài cờ dòng lệnh [một số được lấy trực tiếp từ SMOP]. Để chuyển đổi tệp
python path/to/matlab2python.py file.m -o file.py2 thành
python path/to/matlab2python.py file.m -o file.py3, chỉ cần gõ
python path/to/matlab2python.py file.m -o file.py
trong đó
python path/to/matlab2python.py file.m -o file.py4 là đường dẫn đến tập lệnh
python path/to/matlab2python.py file.m -o file.py5
từ con trăn
Gói python cũng có thể được sử dụng trực tiếp để thực hiện chuyển đổi tệp hoặc dòng mã
________số 8_______
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, thì
python path/to/matlab2python.py file.m -o file.py6 hy vọng sẽ phù hợp với bạn. Những chuyển đổi này là ví dụ
- cú pháp [
python path/to/matlab2python.py file.m -o file.py
7,python path/to/matlab2python.py file.m -o file.py
8,python path/to/matlab2python.py file.m -o file.py
9,import matlabparser as mpars # --- Convert a matlab file pylines = mpars.matlab2python['path/to/file.m', output='file.py'] # --- Convert matlab lines [string or list of strings] mlines="""# a comment x = linspace[0,1,100]; y = cos[x] + x**2; """ pylines = mpars.matlablines2python[mlines, output='stdout']
0, không cònimport matlabparser as mpars # --- Convert a matlab file pylines = mpars.matlab2python['path/to/file.m', output='file.py'] # --- Convert matlab lines [string or list of strings] mlines="""# a comment x = linspace[0,1,100]; y = cos[x] + x**2; """ pylines = mpars.matlablines2python[mlines, output='stdout']
1] - vết lõm
- ngoặc đơn sang ngoặc đơn
- thay thế các hàm dựng sẵn đơn giản [_______8_______2,
import matlabparser as mpars # --- Convert a matlab file pylines = mpars.matlab2python['path/to/file.m', output='file.py'] # --- Convert matlab lines [string or list of strings] mlines="""# a comment x = linspace[0,1,100]; y = cos[x] + x**2; """ pylines = mpars.matlablines2python[mlines, output='stdout']
3,import matlabparser as mpars # --- Convert a matlab file pylines = mpars.matlab2python['path/to/file.m', output='file.py'] # --- Convert matlab lines [string or list of strings] mlines="""# a comment x = linspace[0,1,100]; y = cos[x] + x**2; """ pylines = mpars.matlablines2python[mlines, output='stdout']
4,import matlabparser as mpars # --- Convert a matlab file pylines = mpars.matlab2python['path/to/file.m', output='file.py'] # --- Convert matlab lines [string or list of strings] mlines="""# a comment x = linspace[0,1,100]; y = cos[x] + x**2; """ pylines = mpars.matlablines2python[mlines, output='stdout']
5] - thay thế numpy đơn giản như
import matlabparser as mpars # --- Convert a matlab file pylines = mpars.matlab2python['path/to/file.m', output='file.py'] # --- Convert matlab lines [string or list of strings] mlines="""# a comment x = linspace[0,1,100]; y = cos[x] + x**2; """ pylines = mpars.matlablines2python[mlines, output='stdout']
6 thànhimport matlabparser as mpars # --- Convert a matlab file pylines = mpars.matlab2python['path/to/file.m', output='file.py'] # --- Convert matlab lines [string or list of strings] mlines="""# a comment x = linspace[0,1,100]; y = cos[x] + x**2; """ pylines = mpars.matlablines2python[mlines, output='stdout']
7, hoặcimport matlabparser as mpars # --- Convert a matlab file pylines = mpars.matlab2python['path/to/file.m', output='file.py'] # --- Convert matlab lines [string or list of strings] mlines="""# a comment x = linspace[0,1,100]; y = cos[x] + x**2; """ pylines = mpars.matlablines2python[mlines, output='stdout']
8, thànhimport matlabparser as mpars # --- Convert a matlab file pylines = mpars.matlab2python['path/to/file.m', output='file.py'] # --- Convert matlab lines [string or list of strings] mlines="""# a comment x = linspace[0,1,100]; y = cos[x] + x**2; """ pylines = mpars.matlablines2python[mlines, output='stdout']
9 - các chức năng linh tinh khác như
libsmop
0,libsmop
1,libsmop
2 được thay thế bằng python của họ, - vân vân
Như đã đề cập ở trên, SMOP thực hiện rất tốt việc tạo mã an toàn. Tuy nhiên, cả libsmop
3 và
python path/to/matlab2python.py file.m -o file.py6 đều không tạo ra mã sẵn sàng sản xuất [có thể trong một số trường hợp]. Hầu hết thời gian, người dùng sẽ phải xem qua mã và thực hiện các điều chỉnh và viết lại một số. Trên thực tế,
python path/to/matlab2python.py file.m -o file.py6 có thể sẽ kém hơn một chút so với SMOP trong việc tạo mã hoạt động vượt trội. Nhưng cuối cùng, mã được tạo bởi
python path/to/matlab2python.py file.m -o file.py6 sẽ yêu cầu ít cấu trúc lại hơn và giúp người dùng chuyển đổi. Như tác giả của SMOP đã đề cập, rất khó để không che giấu hương vị matlab khỏi mã được tạo và cũng rất khó để chuyển đổi hoàn toàn mã mà không giới thiệu các lớp được bao bọc sao cho
matlabarray
. Việc triển khai python path/to/matlab2python.py file.m -o file.py6 cố gắng thực hiện điều đó, với cái giá là kém an toàn hơn
Tôi đã viết tập lệnh bao bọc này cho nhu cầu của riêng mình. Tôi đã sẵn sàng chuyển đổi một loạt các tập lệnh matlab theo cách thủ công, nhưng tôi nghĩ rằng tôi có thể có một tập lệnh để tự động hóa một số chuyển đổi và định dạng đơn giản. Tôi đã bắt đầu triển khai nhanh chóng và bẩn thỉu trước khi phát hiện ra libsmop
3. Cuối cùng, tôi đã hợp nhất cách triển khai nhanh và bẩn của mình với khung phân tích cú pháp mạnh hơn được sử dụng bởi SMOP. Hy vọng điều này có thể hữu ích cho người khác. Nếu vậy, hãy đóng góp
Mọi đóng góp cho dự án này đều được hoan nghênh. 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ê [tặng một số tiền nhỏ] bằng liên kết bên dưới