Python調用matlab函數( 使用matlab官方api,解決多維numpy矩陣輸入問題)


1. 安裝

首先,需要安裝MATLAB引擎。Windows cmd打開,cd到:E:\MATLAB\R2016b\extern\engines\python

輸入(linux同理):

python setup.py install

2.確保編輯器為本地環境,試驗 import matlab.engine 是否可用

3.matlab中寫方程

安裝完成后,MATLAB寫一個簡單的函數

function x=myLS(A,B)
x = A\B;
end

隨后,打開 Python, 運行如下命令

import matlab.engine
eng = matlab.engine.start_matlab()
y = eng.myLS(matlab.double([[1.],[2.]]),matlab.double([[3.],[4.]]))
print y

 

4.但此時意識到一個問題:多維np矩陣傳遞無法轉化為matlab.double

報錯 ValueError: initializer must be a rectangular nested sequence

 

matlab官方論壇建議:

python里面 put numpy.ndarry into a list:

data_list = data.tolist()

或者

data_list= matlab.double(data_list.tolist())

MATLAB 里面:

a = [data_list{:}]; 
x = cell2mat(a);
y = double(reshape(x,32,32));

或者:

data_list = double(reshape(data_list,length(data_list),length(data_list)));

 

5. 成功導入,建議統一路徑。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM