MATLAB 데이터 및 시각화 결과 저장을 위한 파일 I/O 함수 활용법

1. 워크스페이스 변수 직렬화: save 함수

MATLAB 환경에서 작업 중인 변수를 바이너리 형태인 .mat 파일로 보존할 때 save 함수를 사용합니다. 이는 워크스페이스의 상태를 그대로 직렬화하는 가장 기본적이고 효율적인 방법입니다.

% 샘플 변수 초기화
sensorReadings = linspace(0, 5, 20);
calibrationMatrix = eye(4) * 2.5;

% 전체 워크스페이스 변수를 단일 파일로 저장
save('sensor_data_full.mat');

% 특정 변수만 선택하여 저장하고 압축 옵션 비활성화 (저장 속도 향상)
save('sensor_data_partial.mat', 'sensorReadings', 'calibrationMatrix', '-nocompression');

2. 순수 텍스트 및 구분 기호 데이터 내보내기

형식 지정 텍스트 출력: fprintf

데이터의 출력 형식을 세밀하게 제어해야 할 경우 fprintf를 사용하여 텍스트 파일에 기록할 수 있습니다.

% 샘플 행렬 생성
temperatureLog = [22.5, 23.1, 21.8; 24.0, 23.5, 22.9];

% 파일 스트림 열기
streamID = fopen('temp_log.txt', 'w');

% 포맷에 맞춰 전치하여 쓰기
fprintf(streamID, 'Zone1: %.1f, Zone2: %.1f, Zone3: %.1f\n', temperatureLog');

% 스트림 종료
fclose(streamID);

구분된 숫자형 행렬 저장: writematrix

숫자형 행렬을 CSV나 TSV와 같이 구분 기호로 분리된 텍스트 파일로 내보낼 때는 writematrix 함수가 적합합니다.

% 난수 행렬 생성
metricsData = randi([10, 50], 4, 3);

% 탭 구분자로 텍스트 파일에 저장
writematrix(metricsData, 'metrics_report.tsv', 'Delimiter', 'tab');

3. 테이블 및 셀 데이터 내보내기

테이블 객체 저장: writetable

혼합 데이터 타입을 포함하는 table 객체는 writetable을 통해 스프레드시트나 CSV 파일로 쉽게 변환됩니다.

% 테이블 객체 구성
deviceIDs = (101:104)';
statusFlags = {'Active'; 'Idle'; 'Active'; 'Maintenance'};
uptimeHours = [120.5; 45.2; 300.0; 12.1];

deviceTbl = table(deviceIDs, statusFlags, uptimeHours, ...
    'VariableNames', {'ID', 'Status', 'Uptime'});

% 엑셀 및 CSV 포맷으로 내보내기
writetable(deviceTbl, 'device_status.xlsx', 'Sheet', 'Main');
writetable(deviceTbl, 'device_status.csv');

셀 배열 내보내기: writecell

이기종 데이터가 포함된 셀 배열(Cell Array)을 엑셀 파일의 특정 시트에 기록할 때는 writecell을 사용합니다.

% 셀 배열 데이터 준비
headerAndData = {'Sensor', 'Value', 'Unit'; 'Temp', 36.5, 'C'; 'Humidity', 45, '%'};

% 엑셀 파일의 특정 시트에 쓰기
writecell(headerAndData, 'sensor_summary.xlsx', 'Sheet', 'RawData');

4. 이미지 매트릭스 파일로 저장: imwrite

행렬 형태로 표현된 이미지 데이터를 PNG, JPEG, TIFF 등의 표준 이미지 포맷으로 디스크에 저장합니다.

% 그라데이션 이미지 행렬 생성
gradientImg = repmat(linspace(0, 1, 256), 256, 1);

% 다양한 포맷으로 디스크에 저장
imwrite(gradientImg, 'gradient_test.bmp');
imwrite(gradientImg, 'gradient_test.tif', 'Compression', 'none');

5. 바이너리 및 커스텀 포맷 제어: fopenfwrite

표준 포맷이 아닌 독자적인 바이너리 구조를 설계하거나 바이트 단위의 메모리 제어가 필요할 경우 저수준 I/O 함수를 활용합니다.

% 바이너리 파일 스트림 개방
binStream = fopen('custom_data.bin', 'w');

% 부동소수점 배열을 바이너리로 직렬화
payload = single([3.1415, 2.7182, 1.4142]);
fwrite(binStream, payload, 'float32');

% 파일 닫기
fclose(binStream);

6. 플롯 및 그래픽 객체 내보내기

기본 그래픽 저장: saveas

현재 Figure 창에 렌더링된 그래프를 벡터 또는 래스터 이미지 형식으로 간단히 캡처하여 저장합니다.

% 샘플 플롯 생성
figure;
plot(1:50, cumsum(randn(1, 50)), 'LineWidth', 2);
title('Random Walk Simulation');

% Figure 객체를 벡터 포맷으로 저장
saveas(gcf, 'random_walk.svg');

고해상도 렌더링 및 내보내기: exportgraphics

출판용 고품질 이미지나 여백이 제거된 깔끔한 그래픽을 얻고자 할 때는 exportgraphics 함수가 효과적입니다.

% 고해상도 래스터 이미지로 내보내기
exportgraphics(gcf, 'random_walk_hq.png', 'Resolution', 300);

7. 구조체 기반 구성 파일 생성: jsonencode

계층적 데이터를 다루는 구성 파일(Configuration)이나 웹 API 연동을 위해 MATLAB 구조체를 JSON 문자열로 인코딩하여 저장할 수 있습니다.

% 계층적 구조체 정의
config.name = 'SystemA';
config.version = 2.1;
config.nodes = struct('id', {1, 2}, 'active', {true, false});

% JSON 문자열로 인코딩 및 파일 기록
jsonPayload = jsonencode(config, 'PrettyPrint', true);
jsonStream = fopen('system_config.json', 'w');
fprintf(jsonStream, '%s', jsonPayload);
fclose(jsonStream);

태그: Matlab file I/O Data Serialization writetable imwrite

6월 23일 03:12에 게시됨