레이블이 matlab인 게시물을 표시합니다. 모든 게시물 표시
레이블이 matlab인 게시물을 표시합니다. 모든 게시물 표시

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 함수들을 멤버함수로 사용하는 형태.


2016년 11월 16일 수요일

matlab text file read

문제
matlab에서 text file을 읽을 때, 처음 몇 줄을 skip하고 읽고 싶은 경우.
ex) in READ.txt
_____________________________
ID    ADDR     TEL(no blank)
int   char[]      int
1     abcd       012345
3     zzzz        012454
...
_____________________________

해결
textread()함수 이용
[id, addr, tel] = textread(strfilename, '%d %s %d', 'headerlines', 2);

기타 textscan, dlmread 들도 가능함.