Python调用matlab函数, 使用matlab官方api,解决多维numpy矩阵输入问题

首次安装使用matlab官方的python 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. 成功导入,建议统一路径。