2017년 5월 30일 화요일

python에서 matlab을 사용하기

문제
python에서 matlab을 사용하자

해결
1. python에서 matlab 모듈을 읽을 수 있도록 설치 - import matlab이 가능하게 됨.
cd "matlabroot/extern/engines/python"
python setup.py install
<참고: http://kr.mathworks.com/help/matlab/matlab_external/install-the-matlab-engine-for-python.html>

2. matlab엔진 모듈을 불러와서 사용함

# matlab 모듈가져오기
import matlab.engine

# 엔진 시작
eng = matlab.engine.start_matlab()

3. 변수 읽고 쓰기
# python에서 숫자 3을 matlab workspace에 넣고 연산하기
eng.workspace['var'] = 3
a = eng.eval('var + 4')
print(a)
주의: 이때 python에서 var에 matrix형태의 숫자를 대입한 경우는 matlab에서는 cell형태(정수라면 int64로 double과 계산이 안됨)로 들어가기에 적절한 변환이 필요하다.
변환의 예: double(cell2mat(var_fromPy)) in matlab

또한 python에서 matlab의 workspace 변수를 가져온 경우에도 matlab.double type이기에 변환이 필요하다
변환의 예:
var_py = np.array(eng.workspace['var']._data.tolist())
scalar인 경우는 _data.tolist()필요없음.

4. script 및 function call하기
user defined script/function의 경우는
eng.addpath('path', nargout=0)으로 경로 추가 후,
eng.script_name('nargout=0') 로 스크립트를 실행시키고
eng.func(a, b)로 함수를 실행시키면 됨.
스크립트를 실행시키면 생성된 변수들은 eng.workspace에 다 저장되어 추후에 사용가능.

5. 요약하자면 python에서 matlab을 사용하는 경우는, eng이라는 class instance에 workspace라는 내부 변수를 저장하고 matlab 함수들을 멤버함수로 사용하는 형태.