lec 12. matlab file i/o

54
MATLAB Programming MATLAB File I/O 김탁은 [email protected] 1

Upload: tak-eun-kim

Post on 15-Jun-2015

1.428 views

Category:

Education


9 download

TRANSCRIPT

Page 1: Lec 12. MATLAB File I/O

MATLAB Programming

MATLAB File I/O

김 탁 은[email protected]

1

Page 2: Lec 12. MATLAB File I/O

MATLAB Programming

MATLAB File I/O

여러 종류의 함수 제공

• 이진화 된 파일(binary file)의 읽고 쓰기

• 형식화 된 파일(formatted ASCII)의 읽고 쓰기

파일 입출력 함수

• save, load 함수

– MATLAB에서 사용하는 데이터 타입을 저장 및 불러오기

• dlmread, dlmwrite

– 사용자가 지정한 구분자 (delimiter) 형태로 텍스트 파일에 저장

• cvsread, cvswrite

– 컴마로 구분된 형태로 데이터를 텍스트 파일에 저장

• xlsread, xlswrite

– 데이터를 Microsoft Excel에 저장하고, 읽어오기 위한 함수

• Low Level File I/O

– C에서 사용하는 파일 입출력 함수들과 거의 동일

2

Page 3: Lec 12. MATLAB File I/O

MATLAB Programming

>> save 파일명

save 파일명• workspace 상의모든변수를 MATLAB

저장형식으로 “파일명”의이름을갖는

파일에저장

3

Page 4: Lec 12. MATLAB File I/O

MATLAB Programming

>> save 파일명 변수명

save 파일명변수명

• workspace 상에서 “변수명”으로

지정한변수를 MATLAB 저장

형식으로 “파일명”의파일에저장

4

Page 5: Lec 12. MATLAB File I/O

MATLAB Programming

>> save 파일명 변수명 변수명 …

save 파일명변수명변수명 …• workspace 상에서 “변수명”으로

지정된모든변수들을 MATLAB 저장

형식으로 “파일명”의파일에저장

5

Page 6: Lec 12. MATLAB File I/O

MATLAB Programming

>> save 파일명 변수명 옵션

save 파일명변수명옵션• workspace 상에서 “변수명”으로지정한

변수를 “옵션”에서지정한형식으로

“파일명”의파일에저장

• 여기서는, 데이터를 8-digit ASCII 포맷 (즉,

텍스트포맷) 으로저장

6

Page 7: Lec 12. MATLAB File I/O

MATLAB Programming

>> save 파일명 변수명 옵션

M_ascii.txt 파일

더블클릭시

7

Page 8: Lec 12. MATLAB File I/O

MATLAB Programming

>> save 파일명 변수명 옵션

여러 가지 옵션

• -ascii

– 8-digit ASCII 형식으로 저장

• -ascii -double

– 16-digit ASCII 형식으로 저장

• -ascii -tabs

– tab에 의해 분리된 데이터를 8-digit ASCII 형식으로 저장

• -ascii -double -tabs

– tab에 의해 분리된 데이터를 16-digit ASCII 형식으로 저장

8

Page 9: Lec 12. MATLAB File I/O

MATLAB Programming

>> save 파일명 변수명 옵션

M_ascii.txt 파일

더블클릭시

아래와같이 double 옵션을주어저장한경우

>> save M_ascii.txt M -ascii -double

9

Page 10: Lec 12. MATLAB File I/O

MATLAB Programming

>> save 파일명 변수명 옵션

M_ascii.txt 파일

더블클릭시

아래와같이 tabs 옵션을주어저장한경우

>> save M_ascii.txt M -ascii -tabs

10

Page 11: Lec 12. MATLAB File I/O

MATLAB Programming

save 함수

MAT 파일 저장

• >> save(‘MAT-파일’, ‘변수명‘, ‘변수명’, …)

• Workspace 상에 변수 M, N이 정의되어 있을 때,

• >> save( ‘test.mat’, ‘M’, ‘N’ )

ASCII 형태로 저장

• >> save(‘ASCII-파일’, ‘변수명’, ‘옵션’, ‘옵션’)

• Workspace 상에 변수 M이 정의되어 있을 때,

• >> save( ‘test.txt’, ‘M’, ‘-ascii’, ‘-double’ ) ASCII 파일로저장하는경우,

변수를여러개동시에저장할수없음

11

Page 12: Lec 12. MATLAB File I/O

MATLAB Programming

복소수의 저장

• 복소수를 ASCII 형식의파일에저장하려고하면, 경고가뜸

• 복소수의허수부는저장되지않음!!

12

Page 13: Lec 12. MATLAB File I/O

MATLAB Programming

복소수의 저장

복소수를 ASCII 형식의파일에저장하려고하면, 복소수의허수부는저장되지않음!!

M_ascii.txt 파일

더블클릭시

복소수의허수부가모두사라짐!!

복소수는반드시 MAT 파일형태로저장하거나,구분자 (delimiter)를사용한텍스트파일로저장해야함

13

Page 14: Lec 12. MATLAB File I/O

MATLAB Programming

Workspace 변수 값 간편하게 저장하기

- Workspace 창에서마우스우측버튼클릭- save 버튼선택하여모든변수들저장- 각변수를클릭하고, 마우스우측버튼

누르면해당변수만저장가능

14

Page 15: Lec 12. MATLAB File I/O

MATLAB Programming

>> load 파일명

load 파일명• “파일명” 이름을갖는파일로부터

데이터를읽어와서 workspace 상의

변수에대입함

15

Page 16: Lec 12. MATLAB File I/O

MATLAB Programming

>> load 파일명

load 파일명• “파일명” 이름을갖는파일로부터

데이터를읽어와서 workspace 상의

변수에대입함

16

Page 17: Lec 12. MATLAB File I/O

MATLAB Programming

>> load 파일명

.mat 파일• 확장자 (.mat)을제외한파일이름

만으로데이터를읽어올수있음

17

Page 18: Lec 12. MATLAB File I/O

MATLAB Programming

>> 변수명 = load(파일명)

변수명 = load(파일명)• 변수명은 struct() 타입으로되어,

파일에저장되어있는각 MATLAB

데이터들은 struct의원소로들어감

18

Page 19: Lec 12. MATLAB File I/O

MATLAB Programming

Current Folder의 파일 더블클릭

myfile.mat 파일

더블클릭시더블클릭만으로데이터를읽어올수있음

19

Page 20: Lec 12. MATLAB File I/O

MATLAB Programming

MAT-file의 저장된 변수명 알아오기

whos(‘-file’, 파일명)

20

Page 21: Lec 12. MATLAB File I/O

MATLAB Programming

일부 변수만 불러오기

load 파일명변수명

• “파일명” 파일로부터 “변수명” 으로

적힌변수들만을 workspace 상으로

읽어옴

21

Page 22: Lec 12. MATLAB File I/O

MATLAB Programming

Quiz

문제 1. 다음은 무작위로 주어진 3차원 공간 상의 점들을 보간 (interpolation)법을

통해 3차원 그래프를 그리는 코드이다.

무작위로 주어진 각 점들의 좌표값과 보간하여 얻어낸 그래프의 좌표 정보를

MAT 파일로 저장하라. (즉, x, y, z, X, Y, Z) 값을 저장

22

Page 23: Lec 12. MATLAB File I/O

MATLAB Programming

Quiz

문제 2. 문제 1에서 3차원 공간상의 점들과, 그래프에 대한 각 좌표값들을 MAT

파일에 저장하였다. 저장한 좌표값들을 MAT 파일로부터 읽어와서 아래 그래프를

복원하려고 한다.

그래프를 복원할 때, 공간상의 점들로부터 보간법으로 그리는 것이 아니라, MAT

파일로부터 읽어온 그래프의 좌표 값을 mesh 함수를 이용하여 그리자.

23

Page 24: Lec 12. MATLAB File I/O

MATLAB Programming

Quiz Sol.

좌표값을 MAT 파일에저장

좌표값을 MAT 파일에서읽어오기

그래프복원

24

Page 25: Lec 12. MATLAB File I/O

MATLAB Programming

외부에서 생성한 데이터 읽어오기

메모장에서데이터

작성및저장한후

MATLAB에서 불러오기

25

Page 26: Lec 12. MATLAB File I/O

MATLAB Programming

CVS 파일 (콤마로 구분된 데이터)로 저장하기

MATLAB 에서 cvswrite

함수를사용하여 CVS

형식으로저장하면, 각

데이터가콤마로구분 26

Page 27: Lec 12. MATLAB File I/O

MATLAB Programming

사용자 지정 구분자로 데이터 저장하기

dlmwrite 함수에서구분자(delimiter)를 ‘|’로주면, 각데이터가 | 로구분

dlmwrite( 파일명, 저장할변수명, ‘delimiter’, 구분자로사용할문자)

27

Page 28: Lec 12. MATLAB File I/O

MATLAB Programming

사용자 지정 구분자 데이터 읽어오기

dlmwrite로저장한텍스트데이터

파일을 load 함수로읽어오게되면모든

데이터를정확하게읽어오지못함

dlmread( 파일명, 구분자로사용한문자)

28

Page 29: Lec 12. MATLAB File I/O

MATLAB Programming

복소수를 텍스트 파일에 저장, 텍스트 파일로부터 읽어오기

각각의복소수가구분자 ‘|’ 로구분됨

29

Page 30: Lec 12. MATLAB File I/O

MATLAB Programming

Excel 데이터 읽어오기

xlsread( 파일명 )

Excel의첫번째 sheet의모든데이터를가져옴

특정셀의데이터가비어있다면,

MATLAB은 NaN으로처리

30

Page 31: Lec 12. MATLAB File I/O

MATLAB Programming

Excel 데이터 읽어오기 (특정 범위 데이터 읽어오기)

xlsread( 파일명, 읽어올영역 )

Excel의첫번째 sheet의 B2:C4 영역의데이터를가져옴

31

Page 32: Lec 12. MATLAB File I/O

MATLAB Programming

Excel 데이터 읽어오기 (특정 sheet 데이터 읽어오기)

xlsread( 파일명, 읽어올시트 )

Excel의 sheet 3의모든데이터를가져옴

32

Page 33: Lec 12. MATLAB File I/O

MATLAB Programming

MATLAB 변수를 Excel에 저장하기

xlswrite( 파일명, 저장할변수명, Excel Sheet 이름)

• sheet 이름생략하면 Sheet1에저장됨

33

Page 34: Lec 12. MATLAB File I/O

MATLAB Programming

MATLAB 변수를 Excel 특정 영역에 저장하기

xlswrite( 파일명, 저장할변수명, Excel Sheet, 영역)

• sheet 이름생략하면 Sheet1에저장됨

34

Page 35: Lec 12. MATLAB File I/O

MATLAB Programming

MATLAB 변수를 Excel 특정 영역에 저장하기

새로운데이터를기존엑셀파일에서데이터가존재하는부분에덮어씀

35

Page 36: Lec 12. MATLAB File I/O

MATLAB Programming

uiimport : 파일에서 데이터 가져오기

• 프롬프트에서 >> uiimport라고입력

• 데이터를파일에서읽어올지, 클립보드에서읽어올지선택

• 여기서는 dlm_test.txt 파일을읽어옵시다.

36

Page 37: Lec 12. MATLAB File I/O

MATLAB Programming

uiimport : 파일에서 데이터 가져오기

dlm_test.txt 파일을읽어옴

• 1. 각행에있는데이터들이모두하나로붙어있음

• 2. 데이터를잘잘라주기위해 delimiter를선택

37

Page 38: Lec 12. MATLAB File I/O

MATLAB Programming

uiimport : 파일에서 데이터 가져오기

• 1. 각행에있는데이터들이모두하나로붙어있음

38

Page 39: Lec 12. MATLAB File I/O

MATLAB Programming

uiimport : 파일에서 데이터 가져오기

import할모든데이터선택후버튼클릭

39

Page 40: Lec 12. MATLAB File I/O

MATLAB Programming

uiimport : 클립보드에서 데이터 가져오기

1. 텍스트 파일 또는 엑셀 파일에서 데이터 선택하고, Ctrl+C 또는

“복사하기” 누름

• 20x20_magic_matrix.txt 파일을 열어, 전체를 선택하고 ctrl+c 하여 복사

40

Page 41: Lec 12. MATLAB File I/O

MATLAB Programming

uiimport : 클립보드에서 데이터 가져오기

2. 프롬프트에서 >> uiimport 입력하고, clipboard 버튼 선택

41

Page 42: Lec 12. MATLAB File I/O

MATLAB Programming

uiimport : 클립보드에서 데이터 가져오기

3. 클립 보드에 들어있는 데이터를 읽음

42

Page 43: Lec 12. MATLAB File I/O

MATLAB Programming

파일 입출력을 위한 Dialog Box

uigetfile : 파일을 가져오기 위한 dialog box

43

Page 44: Lec 12. MATLAB File I/O

MATLAB Programming

파일 입출력을 위한 Dialog Box

uiputfile : 파일을 저장하기 위한 dialog box

44

Page 45: Lec 12. MATLAB File I/O

MATLAB Programming

Low Level File I/O

지금까지 학습한 파일 입출력 방법은 데이터의 크기 등이 균일해야 함

서로 다른 데이터 타입, 서로 다른 크기의 데이터가 혼재되어 있는

파일을 읽고 쓰기 위해서는 저수준 파일 입출력 함수들을 이용해야 함

파일 열기

• fid = fopen( 파일명, 모드)

– fid는 파일 식별자 (file identifier)

파일 닫기

• st = fclose( fid )

– 파일 닫기 성공시 0 리턴

– 파일 닫기 실패시 1 리턴

모드 모드에따른파일입출력작동

r 읽기전용으로파일을연다

r+ 읽기, 쓰기겸용으로파일을연다.

w

주어진파일명을갖는새로운파일을만든다. 주어진파일명과동일한파일이있으면, 파일을지우고새롭게파일을만든다. 만들어진파일을쓰기위해서연다.

w+

주어진파일명을갖는새로운파일을만든다. 주어진파일명과동일한파일이있으면, 지우고새롭게파일을만든다. 만들어진파일을읽고쓰기위해서연다.

a새로운파일을만들고연다. 같은이름의파일이존재하면쓰기위해서파일을연다. 데이터를쓰면, 그데이터는파일의끝에덧붙는다.

a+새로운파일을만들고연다. 같은이름의파일이존재하면읽고, 쓰기위해서파일을연다. 데이터를쓰면, 그데이터는파일의끝에덧붙는다.

45

Page 46: Lec 12. MATLAB File I/O

MATLAB Programming

Low Level File I/O

fprintf 함수

• count = fprintf( fid, format, A, … )

– 파일 식별자 fid를 갖는 파일에 A와 그 뒤에 입력되는 변수들의 값을 forma에

맞추어서 쓴다.

– 쓰여진 데이터의 bytes 수를 count 변수에 반환한다.

– fid 생략하면 화면에 출력

생성된 fprintf_test.txt 파일

46

Page 47: Lec 12. MATLAB File I/O

MATLAB Programming

Low Level File I/O

fprintf 함수

• format의 의미

%-12.5f

Format의 시작을의미

Flag

Field width

Precision

Conversion Specifier

ConversionSpecifier 의미

%c 하나의문자표시

%d 십진법으로 표시

%e 지수형태로표시 (소문자 e 이용)

%E 지수형태로표시 (대문자 E 이용)

%f 고정소수점으로표시

%g 중요하지않은 0 표시하지않음%e, %f 보다간결한표현

%o 8진법으로표시

%s 문자열로표시

%u 부호가없는십진법으로 표시

%x 16진법으로표시 (소문자 a-f)

%X 16진법으로표시 (대문자 A-F)

Flag 의미 예

- 주어진 field의왼쪽으로정렬 %-8.2d

+ 부호표시 %+8.2d

0 빈공간에 0 채움 %08.2d

47

Page 48: Lec 12. MATLAB File I/O

MATLAB Programming

Low Level File I/O

48

Page 49: Lec 12. MATLAB File I/O

MATLAB Programming

Low Level File I/O

fscanf 함수 : 데이터를 지정한 format에 맞게 읽어 들이는 함수

• A = fscanf( fid, format, size )

– 파일 식별자 fid를 갖는 파일로부터 format에 지정된 형식으로 데이터를 size 개수

만큼 읽어 들임

– 읽어 들인 데이터는 열 벡터의 형태로 반환하여 A 변수에 저장

읽어들이고자하는 fscanf_test.txt

49

Page 50: Lec 12. MATLAB File I/O

MATLAB Programming

Low Level File I/O

fscanf 함수

• A = fscanf( fid, format, size )

– size 가 [M N]으로 설정되면, M x N 크기를 갖는 행렬의 형태로 읽어 들임

– size가 inf가 되면, 주어진 파일의 끝까지 읽어 들임

읽어들이고자하는 fscanf_mat_test.txt

50

Page 51: Lec 12. MATLAB File I/O

MATLAB Programming

Quiz

아래와 같이 다양한 형식의 정보가 혼합된 데이터를 파일로부터읽어 와서, 구조체 배열에 저장해 봅시다.

measurement.txt

구조체배열

meas(1)

time : 12:00:00

date : 01-Jan-1977

dat: [4.21 6.55 6.78 6.55; …]

meas(2) meas(3)

51

Page 52: Lec 12. MATLAB File I/O

MATLAB Programming

Quiz Sol.

52

Page 53: Lec 12. MATLAB File I/O

MATLAB Programming

Quiz

아래 그래프를 그리기 위해 다음과 같이 X, Y, Z 값을 계산하면 된다.

X, Y, Z 값은 각각 21 x 21 크기의 행렬로 구성되어 있다. X, Y, Z 행렬(좌표값)을 surf_plot.txt

파일에 저장했다가, surf_plot.txt 파일에 저장된 데이터 값 (좌표값)을 읽어서 동일한

그래프를 그려보자.

>> t = 0:pi/10:2*pi;>> [X,Y,Z] = cylinder(1+cos(t).*sin(2*t));>> surf( X, Y, Z);

파일에좌표값저장

좌표복원

좌표저장

53

Page 54: Lec 12. MATLAB File I/O

MATLAB Programming

Quiz Sol.

좌표저장코드 좌표복원코드

54