MATLAB-데이터 가져 오기
MATLAB에서 데이터를 가져 오는 것은 외부 파일에서 데이터를로드하는 것을 의미합니다. 그만큼importdata기능은 다른 형식의 다양한 데이터 파일을로드 할 수 있습니다. 다음과 같은 다섯 가지 형태가 있습니다.
Sr. 아니. | 기능 및 설명 |
---|---|
1 | A = importdata(filename) filename으로 표시된 파일에서 배열 A로 데이터를로드합니다 . |
2 | A = importdata('-pastespecial') 파일이 아닌 시스템 클립 보드에서 데이터를로드합니다. |
삼 | A = importdata(___, delimiterIn) delimiterIn 을 ASCII 파일, 파일 이름 또는 클립 보드 데이터의 열 구분 기호 로 해석 합니다. 위 구문의 입력 인수와 함께 delimiterIn 을 사용할 수 있습니다 . |
4 | A = importdata(___, delimiterIn, headerlinesIn) ASCII 파일, 파일 이름 또는 클립 보드에서 데이터를로드하여 headerlinesIn + 1 줄에서 시작하는 숫자 데이터를 읽습니다 . |
5 | [A, delimiterOut, headerlinesOut] = importdata(___) 이전 구문의 입력 인수를 사용하여 delimiterOut 에서 입력 ASCII 파일에 대해 감지 된 구분 문자를 반환하고 headerlinesOut 에서 감지 된 헤더 행 수를 반환합니다 . |
기본적으로 Octave는 importdata () 함수를 지원하지 않으므로 다음 예제가 Octave 설치와 함께 작동하도록하려면이 패키지를 검색하고 설치해야합니다.
예 1
이미지 파일을로드하고 표시해 보겠습니다. 스크립트 파일을 만들고 그 안에 다음 코드를 입력하십시오-
filename = 'smile.jpg';
A = importdata(filename);
image(A);
파일을 실행하면 MATLAB이 이미지 파일을 표시합니다. 그러나 현재 디렉토리에 저장해야합니다.
예 2
이 예에서는 텍스트 파일을 가져와 Delimiter 및 Column Header를 지정합니다. 열 머리글이있는 weeklydata.txt 라는 공백으로 구분 된 ASCII 파일을 만들어 보겠습니다 .
weeklydata.txt 텍스트 파일은 다음과 같습니다.
SunDay MonDay TuesDay WednesDay ThursDay FriDay SaturDay
95.01 76.21 61.54 40.57 55.79 70.28 81.53
73.11 45.65 79.19 93.55 75.29 69.87 74.68
60.68 41.85 92.18 91.69 81.32 90.38 74.51
48.60 82.14 73.82 41.03 0.99 67.22 93.18
89.13 44.47 57.63 89.36 13.89 19.88 46.60
스크립트 파일을 만들고 그 안에 다음 코드를 입력하십시오-
filename = 'weeklydata.txt';
delimiterIn = ' ';
headerlinesIn = 1;
A = importdata(filename,delimiterIn,headerlinesIn);
% View data
for k = [1:7]
disp(A.colheaders{1, k})
disp(A.data(:, k))
disp(' ')
end
파일을 실행하면 다음 결과가 표시됩니다.
SunDay
95.0100
73.1100
60.6800
48.6000
89.1300
MonDay
76.2100
45.6500
41.8500
82.1400
44.4700
TuesDay
61.5400
79.1900
92.1800
73.8200
57.6300
WednesDay
40.5700
93.5500
91.6900
41.0300
89.3600
ThursDay
55.7900
75.2900
81.3200
0.9900
13.8900
FriDay
70.2800
69.8700
90.3800
67.2200
19.8800
SaturDay
81.5300
74.6800
74.5100
93.1800
46.6000
예제 3
이 예에서는 클립 보드에서 데이터를 가져 오겠습니다.
다음 줄을 클립 보드에 복사합니다-
Mathematics is simple
스크립트 파일을 만들고 다음 코드를 입력하십시오-
A = importdata('-pastespecial')
파일을 실행하면 다음 결과가 표시됩니다.
A =
'Mathematics is simple'
저수준 파일 I / O
IMPORTDATA 기능은 높은 수준의 함수이다. MATLAB의 저수준 파일 I / O 함수를 사용하면 파일에 대한 데이터 읽기 또는 쓰기를 최대한 제어 할 수 있습니다. 그러나 이러한 기능이 효율적으로 작동하려면 파일에 대한 더 자세한 정보가 필요합니다.
MATLAB은 바이트 또는 문자 수준에서 읽기 및 쓰기 작업을 위해 다음 함수를 제공합니다.
함수 | 기술 |
---|---|
fclose | 열려있는 파일 하나 또는 모두 닫기 |
feof | 파일 끝 테스트 |
공포 | 파일 I / O 오류에 대한 정보 |
fgetl | 줄 바꿈 문자를 제거하여 파일에서 줄 읽기 |
fgets | 줄 바꿈 문자를 유지하면서 파일에서 줄 읽기 |
fopen | 파일 열기 또는 열린 파일에 대한 정보 얻기 |
fprintf | 텍스트 파일에 데이터 쓰기 |
공포 | 바이너리 파일에서 데이터 읽기 |
frewind | 파일 위치 표시기를 열린 파일의 시작으로 이동 |
fscanf | 텍스트 파일에서 데이터 읽기 |
fseek | 파일의 지정된 위치로 이동 |
ftell | 열린 파일의 위치 |
fwrite | 이진 파일에 데이터 쓰기 |
저수준 I / O로 텍스트 데이터 파일 가져 오기
MATLAB은 텍스트 데이터 파일의 저수준 가져 오기를 위해 다음과 같은 함수를 제공합니다.
그만큼 fscanf 함수는 텍스트 또는 ASCII 파일에서 형식화 된 데이터를 읽습니다.
그만큼 fgetl 과 fgets 함수는 한 번에 한 줄의 파일을 읽습니다. 여기서 개행 문자는 각 줄을 구분합니다.
그만큼 fread 함수는 바이트 또는 비트 수준에서 데이터 스트림을 읽습니다.
예
작업 디렉토리에 텍스트 데이터 파일 'myfile.txt'가 저장되어 있습니다. 이 파일은 3 개월 동안의 강우 데이터를 저장합니다. 2012 년 6 월, 7 월, 8 월.
myfile.txt의 데이터에는 다섯 군데에서 반복되는 시간, 월 및 강우 측정 세트가 포함됩니다. 헤더 데이터는 개월 수 M을 저장합니다. M 세트의 측정 값이 있습니다.
파일은 다음과 같습니다.
Rainfall Data
Months: June, July, August
M = 3
12:00:00
June-2012
17.21 28.52 39.78 16.55 23.67
19.15 0.35 17.57 NaN 12.01
17.92 28.49 17.40 17.06 11.09
9.59 9.33 NaN 0.31 0.23
10.46 13.17 NaN 14.89 19.33
20.97 19.50 17.65 14.45 14.00
18.23 10.34 17.95 16.46 19.34
09:10:02
July-2012
12.76 16.94 14.38 11.86 16.89
20.46 23.17 NaN 24.89 19.33
30.97 49.50 47.65 24.45 34.00
18.23 30.34 27.95 16.46 19.34
30.46 33.17 NaN 34.89 29.33
30.97 49.50 47.65 24.45 34.00
28.67 30.34 27.95 36.46 29.34
15:03:40
August-2012
17.09 16.55 19.59 17.25 19.22
17.54 11.45 13.48 22.55 24.01
NaN 21.19 25.85 25.05 27.21
26.79 24.98 12.23 16.99 18.67
17.54 11.45 13.48 22.55 24.01
NaN 21.19 25.85 25.05 27.21
26.79 24.98 12.23 16.99 18.67
이 파일에서 데이터를 가져 와서이 데이터를 표시합니다. 다음 단계를 수행하십시오-
다음으로 파일 열기 fopen 함수를 사용하고 파일 식별자를 가져옵니다.
다음을 사용하여 파일의 데이터를 설명하십시오. format specifiers, 예 : '%s'문자열의 경우'%d'정수인 경우 또는'%f'부동 소수점 숫자의 경우.
파일에서 리터럴 문자를 건너 뛰려면 형식 설명에 포함하십시오. 데이터 필드를 건너 뛰려면 지정자에 별표 ( '*')를 사용하십시오.
예를 들어, 헤더를 읽고 M에 대한 단일 값을 반환하려면 다음과 같이 작성합니다.
M = fscanf(fid, '%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n', 1);
기본적으로, fscanf데이터와 일치하는 항목을 찾지 못하거나 파일 끝에 도달 할 때까지 형식 설명에 따라 데이터를 읽습니다. 여기서는 3 세트의 데이터를 읽기 위해 for 루프를 사용하고 매번 7 행과 5 열을 읽습니다.
파일에서 읽은 데이터를 저장하기 위해 작업 공간에 mydata 라는 구조를 생성 합니다. 이 구조에는 time , month 및 raindata 배열의 세 가지 필드가 있습니다 .
스크립트 파일을 만들고 그 안에 다음 코드를 입력하십시오-
filename = '/data/myfile.txt';
rows = 7;
cols = 5;
% open the file
fid = fopen(filename);
% read the file headers, find M (number of months)
M = fscanf(fid, '%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n', 1);
% read each set of measurements
for n = 1:M
mydata(n).time = fscanf(fid, '%s', 1);
mydata(n).month = fscanf(fid, '%s', 1);
% fscanf fills the array in column order,
% so transpose the results
mydata(n).raindata = ...
fscanf(fid, '%f', [rows, cols]);
end
for n = 1:M
disp(mydata(n).time), disp(mydata(n).month)
disp(mydata(n).raindata)
end
% close the file
fclose(fid);
파일을 실행하면 다음 결과가 표시됩니다.
12:00:00
June-2012
17.2100 17.5700 11.0900 13.1700 14.4500
28.5200 NaN 9.5900 NaN 14.0000
39.7800 12.0100 9.3300 14.8900 18.2300
16.5500 17.9200 NaN 19.3300 10.3400
23.6700 28.4900 0.3100 20.9700 17.9500
19.1500 17.4000 0.2300 19.5000 16.4600
0.3500 17.0600 10.4600 17.6500 19.3400
09:10:02
July-2012
12.7600 NaN 34.0000 33.1700 24.4500
16.9400 24.8900 18.2300 NaN 34.0000
14.3800 19.3300 30.3400 34.8900 28.6700
11.8600 30.9700 27.9500 29.3300 30.3400
16.8900 49.5000 16.4600 30.9700 27.9500
20.4600 47.6500 19.3400 49.5000 36.4600
23.1700 24.4500 30.4600 47.6500 29.3400
15:03:40
August-2012
17.0900 13.4800 27.2100 11.4500 25.0500
16.5500 22.5500 26.7900 13.4800 27.2100
19.5900 24.0100 24.9800 22.5500 26.7900
17.2500 NaN 12.2300 24.0100 24.9800
19.2200 21.1900 16.9900 NaN 12.2300
17.5400 25.8500 18.6700 21.1900 16.9900
11.4500 25.0500 17.5400 25.8500 18.6700