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