Matlab-data-import

提供:Dev Guides
移動先:案内検索

MATLAB-データのインポート

MATLABでデータをインポートすると、外部ファイルからデータが読み込まれます。 importdata 関数を使用すると、さまざまな形式のさまざまなデータファイルをロードできます。 次の5つの形式があります-

Sr.No. Function & Description
1

A = importdata(filename)

_filename_で示されるファイルから配列Aにデータをロードします。

2

A = importdata('-pastespecial')

ファイルからではなく、システムのクリップボードからデータをロードします。

3

A = importdata(_, delimiterIn)

ASCIIファイル、ファイル名、またはクリップボードデータの列区切り文字として_delimiterIn_を解釈します。 上記の構文の任意の入力引数で_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はイメージファイルを表示します。 ただし、現在のディレクトリに保存する必要があります。

Imangeファイルのインポート

例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

この例では、クリップボードからデータをインポートします。

次の行をクリップボードにコピーします-

数学は簡単です

スクリプトファイルを作成し、次のコードを入力します-

A = importdata('-pastespecial')

あなたがファイルを実行すると、次の結果が表示されます-

A =
   'Mathematics is simple'

低レベルのファイルI/O

_importdata_関数は高レベルの関数です。 MATLABの低レベルファイルI/O関数を使用すると、ファイルへのデータの読み取りまたは書き込みを最大限に制御できます。 ただし、これらの関数を効率的に機能させるには、ファイルに関するより詳細な情報が必要です。

MATLABは、バイトまたは文字レベルでの読み取りおよび書き込み操作のために次の機能を提供します-

Function Description
fclose Close one or all open files
feof Test for end-of-file
ferror Information about file I/O errors
fgetl Read line from file, removing newline characters
fgets Read line from file, keeping newline characters
fopen Open file, or obtain information about open files
fprintf Write data to text file
fread Read data from binary file
frewind Move file position indicator to beginning of open file
fscanf Read data from text file
fseek Move to specified position in file
ftell Position in open file
fwrite Write data to binary file

低レベルI/Oでテキストデータファイルをインポートする

MATLABは、テキストデータファイルの低レベルのインポートのために次の機能を提供します-

  • fscanf 関数は、フォーマットされたデータをテキストファイルまたはASCIIファイルで読み取ります。
  • fgetl および fgets 関数は、一度に1行のファイルを読み取ります。改行文字は各行を区切ります。
  • fread 関数は、バイトまたはビットレベルでデータのストリームを読み取ります。

作業ディレクトリに保存されたテキストデータファイル「myfile.txt」があります。 ファイルには3か月間の降雨データが保存されます。 2012年の6月、7月、8月。

myfile.txtのデータには、5つの場所での時間、月、降雨量の測定値の繰り返しセットが含まれています。 ヘッダーデータには月数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 関数でファイルを開き、ファイル識別子を取得します。
  • 文字列の「%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_配列の3つのフィールドがあります。

スクリプトファイルを作成し、その中に次のコードを入力します-

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