본문 바로가기
언어/ㄴPython

[pytyhon] python에서 matlab 함수 사용하기

by 공대우냉이 2020. 4. 8.

python에서 matlab 함수를 사용하기 위하여 matlab은 필수로 설치되어 있어야 한다.

1. matlab 설치

2. python을 matlab이 설치된 폴더에 설치하여야 한다.

(linux 기준)

$ cd "matlabroot/extern/engines/python"
$ python setup.py install
꿀팁: ( $ python setup.py install --user ) - 현재 계정 홈폴더에 설치하면 .bashrc에 pyth 등록하지 않고 사용할 수 있다.
user에 자신의 ID가 아니라 그냥 "user" 그대로 써야한다.

(window 기준)

해본적 없다. 아래 참고 사이트 "참고"

[참고] python api 설치 (matlab 정식 홈페이지 help): https://kr.mathworks.com/help/matlab/matlab_external/install-the-matlab-engine-for-python.html

[참고] 설치 경로 (matlab 정식 홈페이지 help): https://kr.mathworks.com/help/matlab/matlab_external/install-matlab-engine-api-for-python-in-nondefault-locations.html

3. 제대로 설치 되었는지 확인

Python 터미널에서

$ import matlab.engine
$ eng = matlab.engine.start_matlab()

문제 없이 동작하면 eng 변수에 matlab이 실행되었다.

4. 함수 실행

두 벡터를 더하는 함수 add.m 

function z = add(x,y)
z = x+y
return;

위의 함수를 python script에서 사용하려면...

add.m을 python script와 같은 경로에 두고,

python script

import numpy as np
import matlab.engine
import matlab
x1 = np.array([1,2,3]); x2 = np.array([1,2,3])
mat_eng = matlab.engine.start_matlab()
sumed_z = mat_eng.add(matlab.double(x1.tolist()), matlab.double(x2.tolist()), nargout=1)

위와 같이 하면 된다. 사실 돌려보지 않아서 에러가 날 수 있지만 여기서 말하고 싶은 것은

matlab.double와 nargout을 왜 넣어야 하는 것이다.

x1은 numpy이기 때문에 matlab에서는 변수를 받을 수 없기 때문에 matlab.double을 이용하여

데이터 형식을 matlab에 맞게 바꾸어 준다. 

nargout은 출력을 몇개로 할 것인가를 알려주는 인자이다. 이것은 항상 필수로 써주어야 한다.

느려서 웬만하면 python에서 matlab을 사용하지 않는 것을 추천한다.

[참고] 함수 실행 (matlab 정식 홈페이지 help): https://kr.mathworks.com/help/matlab/matlab_external/call-user-script-and-function-from-python.html