Main Content

arrayDatastore

インメモリ データのデータストア

R2020b 以降

説明

ArrayDatastore オブジェクトを使用して、インメモリ データから作成されたデータトアを管理します。関数 arrayDatastore を使用して ArrayDatastore オブジェクトを作成し、そのプロパティを指定すると、オブジェクト関数を使用してデータのインポートおよび処理ができます。

作成

説明

arrds = arrayDatastore(A) は、メモリ内に格納されている配列 A からデータストア arrds を作成します。

arrds = arrayDatastore(A,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して、arrds の追加パラメーターとプロパティを指定します。たとえば、関数 read への各呼び出しによって、arrds = arrayDatastore(data,"ReadSize",3) を呼び出してデータの 3 つの行を読み取ることを指定します。

入力引数

すべて展開する

行列として指定される入力配列。

プロパティ

すべて展開する

ArrayDatastore プロパティは datastore オブジェクト内のインメモリ データの形式を記述し、データストアからデータを読み取る方法を制御します。datastore オブジェクトの作成時に、名前と値のペアの引数を使用して ArrayDatastore プロパティの値を指定できます。オブジェクトの作成後にプロパティの表示または変更を行うには、ドット表記を使用します。

関数 read の一度の呼び出しで読み取るデータの量。'ReadSize' および正の整数として指定します。read の呼び出しごとに、最大で ReadSize 行を読み取ります。入力データの行数を超える 'ReadSize' の値を指定すると、read では datastore オブジェクトのすべての行が読み取られます。

'ReadSize' の既定値は 1 です。

データ型: double

関数 read への呼び出しで読み取るときに使用する次元。'IterationDimension' と正の整数で構成されるコンマ区切りのペアとして指定します。たとえば、'IterationDimension',2 を指定すると、read は datastore オブジェクトから列方向データを返します。'IterationDimension' の既定値は 1 で、read は行方向のデータを返します。

'OutputType' プロパティの値を 'same' として指定する場合、'IterationDimension' は 1 の値に設定しなければなりません。

ArrayDatastore オブジェクトの作成後に 'IterationDimension' の値を変更すると、MATLAB® ではデータストアが未読の状態にリセットされます。

データ型: double

出力データ型。'OutputType' と次の値のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'cell' — データを n 行 1 列の cell 配列として返します。たとえば、A が数値配列で、ReadSize3 の場合、read は数値データの 3 行 1 列の cell 配列を返します。

  • 'same' — 入力配列 A と同じデータ型を返します。たとえば、A が数値配列の場合、read は数値配列を返します。

OutputType の値により、関数 previewread および readall で返されるデータ型が決まります。

ArrayDatastore オブジェクトの作成後に 'OutputType' の値を変更すると、MATLAB ではデータストアが未読の状態にリセットされます。

データ型: char | string

オブジェクト関数

hasdataデータが読み取り可能かどうかを判別
numpartitionsデータストアの区画数
partitionデータストアを分割する
previewデータストア内のデータのサブセットをプレビュー
readデータストアのデータの読み取り
readallデータストアのすべてのデータの読み取り
resetデータストアの初期状態へのリセット
transformデータストアの変換
combine複数のデータストアのデータを統合
shuffleデータストア内のすべてのデータをシャッフルする
subsetデータストアまたは FileSet のサブセットの作成

すべて折りたたむ

行列から ArrayDatastore オブジェクトを作成し、データストア内のすべてのデータを読み取ります。

行列を作成します。

A = magic(10)
A = 10×10

    92    99     1     8    15    67    74    51    58    40
    98    80     7    14    16    73    55    57    64    41
     4    81    88    20    22    54    56    63    70    47
    85    87    19    21     3    60    62    69    71    28
    86    93    25     2     9    61    68    75    52    34
    17    24    76    83    90    42    49    26    33    65
    23     5    82    89    91    48    30    32    39    66
    79     6    13    95    97    29    31    38    45    72
    10    12    94    96    78    35    37    44    46    53
    11    18   100    77    84    36    43    50    27    59

行列から ArrayDatastore オブジェクトを作成します。

arrds = arrayDatastore(A)
arrds = 
  ArrayDatastore with properties:

              ReadSize: 1
    IterationDimension: 1
            OutputType: "cell"

データストアのすべてのデータを読み取ります。

readall(arrds)
ans=10×1 cell array
    {[   92 99 1 8 15 67 74 51 58 40]}
    {[  98 80 7 14 16 73 55 57 64 41]}
    {[  4 81 88 20 22 54 56 63 70 47]}
    {[  85 87 19 21 3 60 62 69 71 28]}
    {[   86 93 25 2 9 61 68 75 52 34]}
    {[ 17 24 76 83 90 42 49 26 33 65]}
    {[  23 5 82 89 91 48 30 32 39 66]}
    {[  79 6 13 95 97 29 31 38 45 72]}
    {[ 10 12 94 96 78 35 37 44 46 53]}
    {[11 18 100 77 84 36 43 50 27 59]}

データを n 行 1 列の cell 配列として返すのではなく、同じデータ型を入力配列として返します。

スプレッドシート ファイル counties.xlsx から table を作成します。スプレッドシート内の 5 ~ 10 番目の列からすべての行をインポートします。

T = readtable("counties.xlsx","Range",[1,5,67,10])
T=66×6 table
          CountyName           State        StateName       Population2010    HousingUnits2010     LandArea 
    _______________________    ______    _______________    ______________    ________________    __________

    {'Fairfield County'   }    {'CT'}    {'Connecticut'}      9.1683e+05         3.6122e+05       1.6185e+09
    {'Hartford County'    }    {'CT'}    {'Connecticut'}      8.9401e+05         3.7425e+05       1.9039e+09
    {'Litchfield County'  }    {'CT'}    {'Connecticut'}      1.8993e+05              87550       2.3842e+09
    {'Middlesex County'   }    {'CT'}    {'Connecticut'}      1.6568e+05              74837       9.5649e+08
    {'New Haven County'   }    {'CT'}    {'Connecticut'}      8.6248e+05           3.62e+05       1.5657e+09
    {'New London County'  }    {'CT'}    {'Connecticut'}      2.7406e+05         1.2099e+05        1.722e+09
    {'Tolland County'     }    {'CT'}    {'Connecticut'}      1.5269e+05              57963       1.0624e+09
    {'Windham County'     }    {'CT'}    {'Connecticut'}      1.1843e+05              49073       1.3284e+09
    {'Androscoggin County'}    {'ME'}    {'Maine'      }       1.077e+05              49090       1.2119e+09
    {'Aroostook County'   }    {'ME'}    {'Maine'      }           71870              39529       1.7279e+10
    {'Cumberland County'  }    {'ME'}    {'Maine'      }      2.8167e+05         1.3866e+05       2.1633e+09
    {'Franklin County'    }    {'ME'}    {'Maine'      }           30768              21709       4.3942e+09
    {'Hancock County'     }    {'ME'}    {'Maine'      }           54418              40184         4.11e+09
    {'Kennebec County'    }    {'ME'}    {'Maine'      }      1.2215e+05              60972       2.2469e+09
    {'Knox County'        }    {'ME'}    {'Maine'      }           39736              23744       9.4569e+08
    {'Lincoln County'     }    {'ME'}    {'Maine'      }           34457              23493       1.1806e+09
      ⋮

table からデータストアを作成します。'OutputType''same' に設定して、同じデータ型を入力 table として返します。

arrds = arrayDatastore(T,"OutputType","same")
arrds = 
  ArrayDatastore with properties:

              ReadSize: 1
    IterationDimension: 1
            OutputType: "same"

データストアのデータをプレビューします。

preview(arrds)
ans=8×6 table
         CountyName          State        StateName       Population2010    HousingUnits2010     LandArea 
    _____________________    ______    _______________    ______________    ________________    __________

    {'Fairfield County' }    {'CT'}    {'Connecticut'}      9.1683e+05         3.6122e+05       1.6185e+09
    {'Hartford County'  }    {'CT'}    {'Connecticut'}      8.9401e+05         3.7425e+05       1.9039e+09
    {'Litchfield County'}    {'CT'}    {'Connecticut'}      1.8993e+05              87550       2.3842e+09
    {'Middlesex County' }    {'CT'}    {'Connecticut'}      1.6568e+05              74837       9.5649e+08
    {'New Haven County' }    {'CT'}    {'Connecticut'}      8.6248e+05           3.62e+05       1.5657e+09
    {'New London County'}    {'CT'}    {'Connecticut'}      2.7406e+05         1.2099e+05        1.722e+09
    {'Tolland County'   }    {'CT'}    {'Connecticut'}      1.5269e+05              57963       1.0624e+09
    {'Windham County'   }    {'CT'}    {'Connecticut'}      1.1843e+05              49073       1.3284e+09

MAT ファイルの変数のデータストアを作成してから、異なる ReadSize 値を指定してファイルからデータを読み取ります。

MAT ファイル BostonWeatherData.mat をワークスペースに読み込みます。

load 'BostonWeatherData.mat'

変数 weatherData のデータストアを作成します。ReadSize10 行に設定します。ReadSize 値により、関数 read の呼び出しごとにデータストアから読み取られるデータ行数が決まります。'OutputType''same' に設定して、同じデータ型を入力配列として返します。

arrds = arrayDatastore(weatherData,"ReadSize",10, "OutputType","same")
arrds = 
  ArrayDatastore with properties:

              ReadSize: 10
    IterationDimension: 1
            OutputType: "same"

データストアからデータを読み取ります。

data1 = read(arrds)
data1=10×3 timetable
       Time        TemperatureF    Humidity       Events   
    ___________    ____________    ________    ____________

    01-Jul-2015         72            78       Thunderstorm
    02-Jul-2015         72            60       None        
    03-Jul-2015         70            56       None        
    04-Jul-2015         67            75       None        
    05-Jul-2015         72            67       None        
    06-Jul-2015         74            69       None        
    07-Jul-2015         75            77       Rain        
    08-Jul-2015         79            68       Rain        
    09-Jul-2015         66            77       Rain        
    10-Jul-2015         69            74       Rain        

ReadSize プロパティの値を 30 に設定して、データストアから読み取ります。関数 read への 2 回目の呼び出しで、データストアから次の 30 行を読み取ります。

arrds.ReadSize = 30;

データストアからデータを読み取ります。

data2 = read(arrds)
data2=30×3 timetable
       Time        TemperatureF    Humidity    Events
    ___________    ____________    ________    ______

    11-Jul-2015         76            49        None 
    12-Jul-2015         81            54        None 
    13-Jul-2015         72            81        None 
    14-Jul-2015         74            72        Rain 
    15-Jul-2015         75            87        Rain 
    16-Jul-2015         64            65        None 
    17-Jul-2015         68            72        None 
    18-Jul-2015         71            81        Rain 
    19-Jul-2015         81            73        Rain 
    20-Jul-2015         81            62        None 
    21-Jul-2015         76            66        None 
    22-Jul-2015         77            58        None 
    23-Jul-2015         75            52        None 
    24-Jul-2015         74            60        Rain 
    25-Jul-2015         66            81        None 
    26-Jul-2015         71            79        Rain 
      ⋮

ArrayDatastore から読み取るときに使用する次元を選択できます。たとえば、4 番目の次元で読み取って ArrayDatastore にデータが格納されているビデオのフレームを読み取ることができます。

ビデオ データを読み込みます。ファイル xylophone.mp4 から VideoReader オブジェクトを作成します。

v = VideoReader('xylophone.mp4');

VideoReader オブジェクトからワークスペースにすべてのビデオ フレームを読み取ります。

allFrames = read(v);

読み取ったフレームからデータストアを作成します。'IterationDimension'4 に設定し、その 4 番目の次元でデータを読み取ります。'OutputType''cell' に設定し、データを cell 配列として返します。'ReadSize' を 4 に設定し、関数 read への各呼び出しで 4 つのビデオ フレームを読み取ります。

arrds = arrayDatastore(allFrames,"IterationDimension",4,"OutputType","cell","ReadSize",4)
arrds = 
  ArrayDatastore with properties:

              ReadSize: 4
    IterationDimension: 4
            OutputType: "cell"

データストアの最初の 4 つのビデオ フレームを四角形内の整列イメージとして読み取り、表示します。

frames = read(arrds);
imout = imtile(frames);
imshow(imout)

Figure contains an axes object. The axes object contains an object of type image.

ヒント

  • 関数 combine および transform を使用して、ArrayDatastore オブジェクトを、ディスク上のデータ (ImageDatastore オブジェクトや TabularTextDatastore オブジェクトなど) を含むデータストアを組み合わせて、変換することができます。

バージョン履歴

R2020b で導入