ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

tall 配列

tall 配列、特に tall テーブルは、datastore に格納されたメモリに収まらないデータを操作するために使用します。データ ストアでは、データセット全体を一度にメモリに読み込むのではなく、大きなデータセットをメモリに収まる小さなチャンクにして操作することができます。tall 配列はこの機能を拡張し、メモリに収まらないデータを一般的な関数を使用して操作できるようにします。このデータは一度に全体がメモリに読み込まれないため、tall 配列は最初の次元を任意に大きくすることができます (つまり、任意の行数をもつことができます)。MapReduce のような手法によって、巨大なサイズのデータを考慮した特別なコードを記述しなくても、tall 配列によって、メモリ内 MATLAB® 配列の操作方法と同様に、直観的な方法で大きなデータセットを操作できます。多くの主要な演算子と関数では、メモリ内配列の操作と同様に tall 配列を操作できます。MATLAB では、データを小さなチャンクごとに操作し、データのチャンク化や処理はすべてバックグラウンドで処理されます。このため、A+B などの一般的な表現で大きなデータセットを操作できます。

メモリ内配列とは異なり、通常、tall 配列は、関数 gather を使用して計算の実行を要求するまで、未評価のままとなります。この "遅延評価" によって、大きなデータセットを迅速に操作できます。最終的に、gather を使用して出力を要求すると、MATLAB によって、キューに入っている計算が可能な限り結合され、データを通す回数が最小限に抑えられます。データを通す回数は実行時間に大きく影響するため、出力は必要な場合にのみ要求することをお勧めします。gather は結果をメモリ内 MATLAB 配列として返すため、通常のメモリに関する注意点を考慮します。gather によって返された結果が大きすぎると、MATLAB でメモリ不足が発生する可能性があります。

tall テーブルの作成

tall テーブルは、任意の行数をもつことができる点を除けば、メモリ内 MATLAB テーブルと似ています。大規模なデータセットから tall テーブルを作成するには、最初にデータ用に datastore を作成する必要があります。データ ストア ds に表形式のデータが含まれている場合は、tall(ds) によってデータを含んだ tall テーブルが返されます。データ ストアの作成の詳細については、「データ ストア」を参照してください。

航空会社の航空便データの表形式ファイルを指すスプレッドシート データ ストアを作成します。ファイルの集合を含むフォルダーの場合は、フォルダー全体の場所を指定するか、ワイルドカード文字 '*.csv' を使用して、同じファイル拡張子をもつ複数のファイルをデータ ストアに格納することができます。データを整理するには、'NA' 値を欠損データとして扱い、datastore によってそれらを NaN と置き換えます。また、いくつかのテキスト変数の形式を %s に設定することにより、datastore がそれらを文字ベクトルのセル配列として読み込むようにします。

ds = datastore('airlinesmall.csv');
ds.TreatAsMissing = 'NA';
ds.SelectedFormats{strcmp(ds.SelectedVariableNames,'TailNum')} = '%s';
ds.SelectedFormats{strcmp(ds.SelectedVariableNames,'CancellationCode')} = '%s';

データ ストアから tall テーブルを作成します。この tall テーブルに対して計算を実行するとき、基となるデータ ストアでは、データのチャンクが読み取られ、それらが処理対象の tall テーブルに渡されます。データ ストアと tall テーブルのいずれにも、基となるデータは保持されません。

tt = tall(ds)
tt =

  M×29 tall table 

    Year    Month    DayofMonth    DayOfWeek    DepTime    CRSDepTime    ArrTime    CRSArrTime    UniqueCarrier    FlightNum    TailNum    ActualElapsedTime    CRSElapsedTime    AirTime    ArrDelay    DepDelay    Origin    Dest     Distance    TaxiIn    TaxiOut    Cancelled    CancellationCode    Diverted    CarrierDelay    WeatherDelay    NASDelay    SecurityDelay    LateAircraftDelay
    ____    _____    __________    _________    _______    __________    _______    __________    _____________    _________    _______    _________________    ______________    _______    ________    ________    ______    _____    ________    ______    _______    _________    ________________    ________    ____________    ____________    ________    _____________    _________________

    1987    10       21            3             642        630           735        727          'PS'             1503         'NA'        53                   57               NaN         8          12          'LAX'     'SJC'    308         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN              
    1987    10       26            1            1021       1020          1124       1116          'PS'             1550         'NA'        63                   56               NaN         8           1          'SJC'     'BUR'    296         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN              
    1987    10       23            5            2055       2035          2218       2157          'PS'             1589         'NA'        83                   82               NaN        21          20          'SAN'     'SMF'    480         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN              
    1987    10       23            5            1332       1320          1431       1418          'PS'             1655         'NA'        59                   58               NaN        13          12          'BUR'     'SJC'    296         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN              
    1987    10       22            4             629        630           746        742          'PS'             1702         'NA'        77                   72               NaN         4          -1          'SMF'     'LAX'    373         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN              
    1987    10       28            3            1446       1343          1547       1448          'PS'             1729         'NA'        61                   65               NaN        59          63          'LAX'     'SJC'    308         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN              
    1987    10        8            4             928        930          1052       1049          'PS'             1763         'NA'        84                   79               NaN         3          -2          'SAN'     'SFO'    447         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN              
    1987    10       10            6             859        900          1134       1123          'PS'             1800         'NA'       155                  143               NaN        11          -1          'SEA'     'LAX'    954         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN              
    :       :        :             :            :          :             :          :             :                :            :          :                    :                 :          :           :           :         :        :           :         :          :            :                   :           :               :               :           :                :
    :       :        :             :            :          :             :          :             :                :            :          :                    :                 :          :           :           :         :        :           :         :          :            :                   :           :               :               :           :                :

この表示には、行数 M が現在不明であることが示されます。MATLAB により一部の行が表示され、縦方向の省略記号 : によって、tall テーブルに現在表示されていない、いくつかの行が存在することが示されます。

tall 配列の作成

tall テーブルから変数を抽出すると、結果は対応する基となるデータ型の tall 配列になります。tall 配列は、数値配列、論理配列、datetime 配列、duration 配列、カレンダー期間配列、カテゴリカル配列、string 配列、セル配列のいずれかになります。また、メモリ内配列 AtA = tall(A) によって tall 配列に変換できます。メモリ内配列 A は、サポートされているいずれかのデータ型でなければなりません。

tall テーブルから到着遅延時間 ArrDelay を抽出します。これにより、基となるデータ型が double の新しい tall 配列変数が作成されます。

a = tt.ArrDelay
a =

  M×1 tall double column vector

     8
     8
    21
    13
     4
    59
     3
    11
    :
    :

関数 classUnderlying と関数 isaUnderlying は、tall 配列の基となるデータ型を特定するのに役立ちます。

遅延評価

tall 配列とテーブルの重要点の 1 つに、それらを操作するとき、ほとんどの操作が即座に実行されないことがあります。これらの操作は高速に実行されるように見えますが、これは計算の実行が明確に要求されるまで実際の計算が延期されるためです。tall 配列の評価は、関数 gather (メモリに結果を格納) または関数 write (結果をディスクに書き込み) のいずれかによってトリガーできます。size(X) のような単純なコマンドでも、10 億行の tall 配列で実行した場合、迅速に計算されないため、この遅延評価は重要です。

tall 配列の操作中は、実行されるすべての操作が MATLAB によって追跡されます。その後、この情報は関数 gather で出力を要求するときに必要となり、データを通す回数を最適化するために使用されます。そのため、必要な場合にのみ未評価の tall 配列を処理し、出力を要求するようになっています。詳細については、「tall 配列の遅延評価」を参照してください。

到着遅延時間の平均と標準偏差を計算します。これらの値を使用して、平均の 1 標準偏差内の遅延に対する上限と下限のしきい値を作成します。各操作の結果が、配列がまだ計算されていないことを示している点に注意してください。

m = mean(a,'omitnan')
m =

   tall double 

    ?
s = std(a,'omitnan')
s =

   tall array

    ?
one_sigma_bounds = [m-s m m+s]
one_sigma_bounds =

  M×N×... tall array

    ?    ?    ?    ...
    ?    ?    ?    ...
    ?    ?    ?    ...
    :    :    :
    :    :    :

gather による評価

遅延評価のメリットは、MATLAB で計算を実行する段階になったときに、多くの場合はデータを通す回数が最小になるように演算を組み合わせることが可能である点です。したがって、実行する演算が多くても、MATLAB はどうしても必要な場合にのみ追加でデータを通します。

関数 gather によって、キューに登録されたすべての演算が強制的に評価されて、結果の出力はメモリに戻ります。gather は MATLAB での結果全体を返すため、結果がメモリに収まることを確認する必要があります。

gather を使用して one_sigma_bounds を計算し、結果をメモリに格納します。この場合、one_sigma_bounds を計算するにはいくつかの演算が必要ですが、MATLAB によって操作が結合され、データが 1 回だけ通されます。この例のデータは小さいため、gather は迅速に実行されます。ただし、データを通す操作を削減することは、データのサイズが増加するにつれてより重要度を増します。

sig1 = gather(one_sigma_bounds)
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 1 sec
Evaluation completed in 1 sec

sig1 =

  -23.4572    7.1201   37.6975

一度に複数の tall 配列を評価する必要がある場合は、gather に複数の入力と出力を指定できます。この手法は、gather を複数回呼び出すよりも高速です。たとえば、最小および最大到着遅延時間を計算します。別々に計算した場合、それぞれの値でデータを 1 回通す必要があるため、合計 2 回通して計算することになります。しかし、両方の値を同時に計算する場合は、データを通す必要があるのは 1 回のみになります。

[max_delay, min_delay] = gather(max(a),min(a))
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 1 sec
Evaluation completed in 1 sec

max_delay =

        1014


min_delay =

   -64

これらの結果は、平均でほとんどの航空便が約 7 分遅れで到着することを示しています。しかし、1 標準偏差内に入る航空便は 23 分早いものから 37 分遅いものまでになります。データセットの中で、最も早く到着した便は約 1 時間早く、最も遅い便は数時間遅れています。

tall 配列の保存、読み込み、およびチェックポイントの作成

関数 save は、tall 配列の "状態" を保存しますが、データはコピーしません。通常、結果の .mat ファイルは小さくなります。ただし、後で load を使用するためには、元のデータ ファイルが同じ場所に存在しなければなりません。

関数 write は、データのコピーを作成し、バイナリ ファイルの集合としてコピーを保存するため、大量のディスク領域を消費する可能性があります。write は、書き込みの前に、tall 配列のすべての保留中の操作を実行して値を計算します。write が一度データをコピーすると、元の生データから独立したものになります。したがって、元の生データを使用できなくなった場合でも、書き込み済みのファイルから tall 配列を再作成できます。

ファイルが書き込まれた場所を指す新しいデータ ストアを作成することによって、書き込み済みのバイナリ ファイルから tall 配列を再作成できます。この機能によって、tall 配列データの "チェックポイント" または "スナップショット" を作成できます。チェックポイントの作成は、データの前処理の結果を保存する優れた方法で、データがより効率的に読み込める形式になります。

次のコマンドによって tall 配列 TA をフォルダー location へ書き込むことができます。

write(location,TA);

後で、書き込み済みのファイルから TA を再構築するには、次のコマンドを使用します。

ds = datastore(location);
TA = tall(ds);

さらに、関数 write を使用して、tall 配列の評価をトリガーし、結果をディスクに書き込むことができます。この write の使用方法は gather と似ていますが、write は結果をメモリに格納しません。

ツールボックスの機能

tall 配列はいくつかのツールボックスでサポートされており、機械学習アルゴリズムの記述、スタンドアロン アプリの配布、および並列計算やクラスターでの計算の実行が可能です。詳細については、他の製品による tall 配列の拡張を参照してください。

参考

| | | |

関連するトピック

この情報は役に立ちましたか?