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
'언어 > ㄴPython' 카테고리의 다른 글
[python] randomly shuffle train data (0) | 2016.02.19 |
---|---|
[python] python script is executed by matlabprogram (0) | 2016.02.04 |
[python] How to get matlab data file '.mat' in python (0) | 2016.01.25 |
[pyton] numpy.cmd (0) | 2016.01.21 |
[python] generating random array (0) | 2016.01.21 |