MATLAB 데이터 내보내기: 파일 형식과 기법 총정리
데이터 내보내기 개요
MATLAB에서 데이터 내보내기란 데이터를 파일에 쓰는 것입니다. ASCII 파일을 읽는 다른 응용프로그램에서 데이터를 활용할 수 있도록 여러 내보내기 옵션을 제공합니다.
생성 가능한 파일 유형
- 배열로부터 구분된 직사각형 ASCII 데이터 파일
- 키스트로크와 텍스트 출력의 일지(diary/log) 파일
- fprintf 등 저수준 함수로 만드는 특수 ASCII 파일
- 특정 텍스트 파일 형식을 쓰는 C/C++/Fortran 루틴에 접근하는 MEX 파일
스프레드시트로도 내보낼 수 있습니다.
숫자 배열을 구분된 ASCII 파일로 저장
두 가지 방법:
save 함수에 -ascii 한정자 사용
dlmwrite 함수 사용
save -ascii 구문
save my_data.out num_array -ascii
my_data.out: 생성될 ASCII 파일
num_array: 숫자 배열
-ascii: ASCII 형식 지정자
dlmwrite 구문
dlmwrite('my_data.out', num_array, 'dlm_char')
예제
num_array = [1 2 3 4; 4 5 6 7; 7 8 9 0];
save array_data1.out num_array -ascii;
type array_data1.out
dlmwrite('array_data2.out', num_array, ' ');
type array_data2.out
실행 결과:
% save -ascii 결과 (지수 표기)
1.0000000e+00 2.0000000e+00 3.0000000e+00 4.0000000e+00
4.0000000e+00 5.0000000e+00 6.0000000e+00 7.0000000e+00
7.0000000e+00 8.0000000e+00 9.0000000e+00 0.0000000e+00
% dlmwrite 결과 (공백 구분)
1 2 3 4
4 5 6 7
7 8 9 0
※ save -ascii와 dlmwrite는 셀 배열 입력을 지원하지 않습니다. 셀 배열을 ASCII 파일로 저장하려면 cell2mat으로 행렬 변환 후 저장하거나 저수준 I/O 함수를 사용하세요.
문자 배열을 ASCII로 저장
h = 'hello';
save textdata.out h -ascii
type textdata.out
결과: 각 문자의 8자리 ASCII 코드가 지수 표기로 저장됩니다.
1.0400000e+02
1.0100000e+02
1.0800000e+02
1.0800000e+02
1.1100000e+02
일지(Diary) 파일 작성
Diary 파일은 MATLAB 세션의 정확한 사본(그래픽 제외)을 디스크에 저장합니다.
diary % 켜기 (기본 파일명: diary)
diary logdata.out % 파일명 지정
diary off % 끄기
텍스트 에디터로 열람 가능합니다.
저수준 I/O로 텍스트 데이터 파일 내보내기 (fprintf)
숫자/문자 혼합, 비직사각형 출력, 비ASCII 인코딩 등이 필요할 때 fprintf를 사용합니다.
fopen으로 파일 열기 (쓰기 권한 'w' 또는 추가 'a' 지정)
fprintf로 데이터 쓰기
fclose(fid)로 파일 닫기
예제: 로그 함수 테이블 생성
x = 0:10:100;
y = [x; log(x)]; % 2행 행렬
fid = fopen('logtable.txt', 'w');
fprintf(fid, 'Log Function\n\n');
fprintf(fid, '%f %f\n', y); % 열 우선으로 쓰여 각 행에 두 값씩
fclose(fid);
type logtable.txt
실행 결과 (logtable.txt 내용):
Log Function
0.000000 -Inf
10.000000 2.302585
20.000000 2.995732
30.000000 3.401197
40.000000 3.688879
50.000000 3.912023
60.000000 4.094345
70.000000 4.248495
80.000000 4.382027
90.000000 4.499810
100.000000 4.605170