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 파일에서 형식화 된 데이터를 읽습니다.

  • 그만큼 fgetlfgets 함수는 한 번에 한 줄의 파일을 읽습니다. 여기서 개행 문자는 각 줄을 구분합니다.

  • 그만큼 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 , monthraindata 배열의 세 가지 필드가 있습니다 .

스크립트 파일을 만들고 그 안에 다음 코드를 입력하십시오-

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