SturdyCobble's Study Note

[MATLAB] 09. 데이터 처리와 파일 입출력 본문

프로그래밍/MATLAB

[MATLAB] 09. 데이터 처리와 파일 입출력

StudyingCobble 2019. 9. 2. 12:25

NOTICE : 독학인 만큼, 잘못된 내용이 있을 수 있습니다. 내용 지적은 언제나 환영합니다.

더 이상 이 블로그에는 글을 올리지는 않을 예정입니다. 그렇지만 댓글을 달아주시면 최대한 답변드리고자 노력하겠습니다.


※ 이 글은 최소한 Python과 같은 프로그래밍 언어를 한 번 이상 접한 사람을 독자로 가정하여 작성되었습니다. 사용버전은 R2019a기준입니다. 또한 기본적인 프로그램 조작보다는 프로그래밍에 초점을 맞추어 작성하였습니다.


 엑셀에서 여러 데이터를 처리하듯, MATLAB에서도 여러 데이터를 처리하고, 시각화할 상황이 생길 수 있습니다. 엑셀에서 행 단위로 측정값을 기록하고, 열마다 측정값의 종류를 다르게 하듯이, 행렬로 다음과 같이 데이터를 저장할 수 있습니다.

%시간 측정값1 측정값2
data = [1.0000    0.6715    0.8884
        2.0000   -1.2075   -1.1471
        3.0000    0.7172   -1.0689
        4.0000    1.6302   -0.8095
        5.0000    0.4889   -2.9443
        6.0000    1.0347    1.4384
        7.0000    0.7269    0.3252
        8.0000   -0.3034   -0.7549
        9.0000    0.2939    1.3703
        10.0000   -0.7873   -1.7115 ] ;

 

이렇게 구해진 데이터의 평균과 표준편차를 구해봅시다. 이는 mean, std함수로 빠르게 구할 수 있고, 그 결과는 1×N 행렬입니다.

>> mean(data)

ans =

    5.5000    0.3265   -0.4414

>> std(data)

ans =

    3.0277    0.8597    1.4211

 

만약, 최댓값과 그 위치를 찾아야 한다면 어떨까요? max함수를 이용하면 됩니다.

>> max(data)

ans =

   10.0000    1.6302    1.4384

 

그런데, 위치에 대한 정보가 없습니다. 이는 max가 1×N배열을 2개 반환하기 때문입니다. 이는 다음과 같이 하여 얻을 수 있습니다. (1×2 행렬을 반환하는 것과 1×1 행렬을 2개 반환하는 것에 차이가 있음을 주의하세요!)

>> [vmax, pmax ] = max(data)

vmax =

   10.0000    1.6302    1.4384


pmax =

    10     4     6

 

만약 위치에 대한 정보만 필요하다면 물결표(~)를 이용해 특정 위치의 입력값을 다음과 같이 무시할 수 있습니다.

[~ , pmax] = max(data)

 

그 외 통계나 데이터 분석 관련 함수는 아래 명령어로 확인가능합니다.

 

>> % 한번에 다 표시되지 않게 more on인 상태입니다. 단순히 블로그 글이 길어지는 걸 막으려고 추가했습니다.
>> help datafun
  Data analysis and Fourier transforms.
 
  Basic operations.
    sum          - Sum of elements.
    prod         - Product of elements.
    min          - Smallest component.
--more--
>> help stats
stats - Return cached values and statistics for MemoizedFunction object

    This MATLAB function returns cached values and statistics on the use of a
    MemoizedFunction object.

    s = stats(mfcn)
--more--

 

만약, 외부의 데이터를 불러 온다면 어떻게 해야할까요? 이에 관해 save와 load, readtable, writetable, xlsread, xlswrite 등의 함수를 이용할 수 있습니다. 자세한 용법은 각 문서를 참조하시고, 여기서는 간단한 용법만 다뤄보겠습니다.

파일 입출력에
필요한 주요 함수
매개변수 및 설명
[ ] 표시는 선택 사항의 의미
 
save save(filename, [variableName], [format])
(모두 string형 또는 문자 벡터)
[format]에 따라 filename이름을 가진 파일로
변수 [variableName] 저장.(생략시 전체)
load load(filename, [format], [variableName])
(모두 string형 또는 문자 벡터)
[format]에 따라 filename을 [variableName] 변수에 불러옴.
writetable writetable(tableVariable, [filename], [options])
(tableVariable빼고 string형 또는 문자 벡터)
[options]들에 따라서 [filename]에 테이블형 변수 tableVariable를 저장.
readtable tableVariable = readtable(filename, [options])
(매개변수는 string또는 char벡터)
[options]들에 따라서 [filename]을 테이블형 변수로 바꿔 테이블형 반환
table2array table2array(tableVar) 테이블을 배열로 변환
array2table array2table(arrayVar) 배열을 테이블을 배열로 변환
파일 입출력 시
유용한 함수
   
int2str int2str(intVar) 정수를 문자열로 변환

 

자세한 설명은 공식 문서를 참고하시면 되겠습니다. 예시는 save, load, sprintf만 가지고 나타내겠습니다.

%시간 측정값1 측정값2
data(:,:,1) = ...
        [1.0000    0.6715    0.8884
        2.0000   -1.2075   -1.1471
        3.0000    0.7172   -1.0689
        4.0000    1.6302   -0.8095
        5.0000    0.4889   -2.9443
        6.0000    1.0347    1.4384
        7.0000    0.7269    0.3252
        8.0000   -0.3034   -0.7549
        9.0000    0.2939    1.3703
        10.0000   -0.7873   -1.7115 ] ;
data(:,:,2) = ... 
        [1.0000    0.8725    0.9884
        2.0000   -1.2075   -1.1471
        3.0000    0.7172   -1.0689
        4.0000    1.6302   -0.8095
        5.0000    0.4889   -2.9443
        6.0000    1.0347    1.4384
        7.0000    0.7269    0.3252
        8.0000   -0.3034   -0.7549
        9.0000    0.2939    1.3703
        10.0000   -0.7873   -1.7115 ] ;
n = 1;
[~,~,lenDat] = size(data);
while n <= lenDat
    i = data(:,:,n);
    save("data_"+int2str(n)+".txt",'i', '-ascii')
    %format생략시 mat파일 형식으로 저장
    n = n + 1;
end


load 'data_1.txt' '-ascii' 'dat01'

배열을 파일로 저장했다가 다시 불러오는 예시입니다. 파일을 보면 다음과 같습니다.

 

 

Comments