主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

メモリに収まらないデータの高配列

高配列は,数据存储でバックアップされた,メモリに収まらないデータの操作に使用されます。データストアでは、データセット全体を一度にメモリに読み込むのではなく、大きなデータセットをそれぞれがメモリに収まる小さなブロックにして操作することができます。tall 配列はこの機能を拡張し、メモリに収まらないデータを一般的な関数を使用して操作できるようにします。

高配列とは

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

高配列の利点

インメモリ配列とは異なり,通常,高配列は,関数收集を使用して計算の実行を要求するまで,未評価のままとなります。この“遅延評価”によって,大きなデータセットを迅速に操作できます。最終的に,收集を使用して出力を要求すると,MATLABによって,キューに入っている計算が可能な限り結合され,データを通す回数が最小限に抑えられます。データを通す回数は実行時間に大きく影響するため,出力は必要な場合にのみ要求することをお勧めします。

メモ

收集は結果をインメモリMATLAB配列として返すため,通常のメモリに関する注意点を考慮します。收集によって返された結果が大きすぎると,MATLABでメモリ不足が発生する可能性があります。

高テーブルの作成

高テーブルは,任意の行数をもつことができる点を除けば,インメモリMATLABテーブルと似ています。大規模なデータセットから高表を作成するには,まずデータ用のデータストアを作成する必要があります。データストアdsに表形式のデータが含まれている場合,高(DS)はデータを含む高表または高时间表を返します。データストアの作成の詳細については,データストアを参照してください。

航空会社の航空便データの表形式ファイルを指すスプレッドシートデータストアを作成します。ファイルのコレクションを含むフォルダーの場合は,フォルダー全体の場所を指定するか,ワイルドカード文字‘* . csv‘を使用して,同じファイル拡张子をもつ复数のファイルをデータストアに格纳することができます。データを整理するには,“NA”値を欠損データとして扱います。これにより,tabularTextDatastoreがそれらを値に置き換えます。また,いくつかのテキスト変数の形式を% sに設定します。これにより,tabularTextDatastoreがそれらを文字ベクトルの细胞配列として読み取ります。

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

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

tt =高(ds)
tt = M×29 tall table Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime uniqucarrier FlightNum TailNum ActualElapsedTime CRSElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode altered CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay _________ ___________________ _______ __________ _______ __________ _____________ _________ _______ _________________ ______________ _______ ________ ________ ______ _____ ________ ______ _______ _________ ________________ ________ ____________ ____________ ________ _____________ _________________ 1987 21 642 630 735 727“PS”1503“NA”53 57南8 12“宽松”“SJC”308南南“NA”0南南南南南26 1 1021 1020 1124 1987 1116 1550“NA”63“PS”56南8 296南南“SJC”“钻”0“NA”南南南南南1987年10 23 5 2055 2035 2218 2157“PS”1589“NA”83 82南21 20“圣”SMF 480年南南“NA”0南南南南南1987 10 23 5 1332 1320 1431 1418“PS”1655“NA”59 58南13 12“钻”“SJC”296南南0 0南南南南南1987“NA”10 22 4 629 630 746 742“PS”1702“NA”77 72南4 373南南SMF的“宽松”0“NA”南南南南南1987 10 28 1448 PS 1729 1446 1343 1547 61 65南59 63“NA”“宽松”SJC 308年南南“NA”0南南南南南1987 10 8 4 928 930 1052 1049“PS”1763“NA”84 79南3 2“圣”“旧金山”447南南“NA”0南南南南南1987 10 10 6 859 900 1134 1123“PS”1800“NA”155 143南11 954南南“海”“宽松”0“NA”南南南南南  : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

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

高的时间表の作成

操作するデータの各行に時間が関連付けられている場合は,高大的时间表を使用してデータを操作することができます。高的时间表の作成については,拡张机能(时间表を参照してください。

この場合,高大的表ttの各行には時間が関連付けられていますが,一年DayofMonthなどの複数のテーブル変数に分割されています。これらのすべてのdatetime情報を,出発時間DepTimeに基づく1つの新しい高datetime変数日期に結合します。次に,日期を行時間として使用して高时间表を作成します。日期表内はこのの唯一のdatetime変数であるため,関数table2timetableはそれを行時間として自動的に使用します。

小时= (tt。DepTime- mod(tt.DepTime,100))/100; mins = mod(tt.DepTime,100); tt.Dates = datetime(tt.Year, tt.Month, tt.DayofMonth, hrs, mins, 0); tt(:,1:8) = []; TT = table2timetable(tt)
TT = M×21个高大时间表日期UniqueCarrier FlightNum TailNum ActualElapsedTime CRSElapsedTime通话时间ArrDelay DepDelay产地目标距离TaxiIn TaxiOut取消CancellationCode改行CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay ____________________ _____________ _________ _______ _________________ ______________ _______ ________ ________ ______ _____ ________ ______ _______ _________ ________________ ________ ____________ ____________ ________ ______________________________ 21-OCT-1987 6时42分00秒 'PS' 1503 'NA' 53 57 8的NaN 12 'LAX' 'SJC' 308楠楠0 'NA' 0楠楠楠楠NaN的26-OCT-1987 10时21分:00 'PS' 1550 'NA' 63 56 8的NaN 1 'SJC' 'BUR' 296楠楠0 'NA' 0楠楠楠楠NaN的23-OCT-1987 20时55分00秒 'PS' 1589 'NA'83 82 21的NaN 20 'SAN' 'SMF' 480楠楠0 'NA' 0楠楠楠楠NaN的23-OCT-1987十三时32分00秒 'PS' 1655 'NA' 59 58 13的NaN 12 'BUR''SJC” 296楠楠0 'NA' 0楠楠楠楠NaN的22-OCT-1987 6时29分00秒 'PS' 1702 'NA' 77 72的NaN 4 -1 'SMF' 'LAX' 373的NaN为NaN 0 'NA' 0楠楠楠楠NaN的28-OCT-1987 14时46分00秒 'PS' 1729 'NA' 61 65 59的NaN 63 'LAX' 'SJC' 308楠楠0 'NA' 0为NaN楠楠楠楠08-OCT-1987 9时28分00秒 'PS' 1763 'NA' 84 79 NaN 3的-2 'SAN' 'SFO' 447楠楠0 'NA' 0楠楠楠楠NaN的10-OCT-1987 08:59:00 'PS' 1800 'NA' 155 143的NaN 11 -1 'SEA' 'LAX' 954楠楠0 'NA' 0楠楠楠楠楠::::::::::::::::::::::::

高配列の作成

高表または高时间表から変数を抽出すると,結果は対応する基となるデータ型の高配列になります。高配列は,数値配列、logical 配列、datetime 配列、duration 配列、カレンダー期間配列、categorical 配列、string 配列、cell 配列のいずれかになります。また、インメモリ配列一个tA =高(A)によって高大的配列に変换できます。インメモリ配列一个はサポートされるいずれかのデータ型をもたなければなりません。

高的时间表TTから到着遅延時間ArrDelayを抽出します。これにより,基となるデータ型が double の新しい tall 配列変数が作成されます。

一个= TT。一个rrDelay
A = M×1个高大双列向量8 8 21 13 4 59 3 11:

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

遅延评価

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

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

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

M =平均值(一,“omitnan”
M =高双?预览延期。学习更多的知识。
s =性病(,“omitnan”
S =高?预览延期。学习更多的知识。
One_sigma_bounds = [m-s m m+s]
one_sigma_bounds = M×N×...高大阵列?还是还是...?还是还是...?还是还是...::::::预览推迟。 Learn more.

收集による評価

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

関数收集によって,キューに登録されたすべての演算が強制的に評価されて,結果の出力はメモリに戻ります。このため,收集を高配列とインメモリ配列の間のブリッジと考えることができます。たとえば高逻辑配列を使用して如果またはループを制御することはできませんが,この配列は收集で评価するとインメモリ逻辑配列になるため,これらのコンテキストで使用できます。

收集はMATLABでの結果全体を返すため,結果がメモリに収まることを確認する必要があります。

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

sig1 =收集(one_sigma_bounds)
在1.8秒内完成的评估sig1 = -23.4572 7.1201 37.6975

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

[max_delay, min_delay] = gather(max(a),min(a))
在1.1秒内完成的评估max_delay = 1014 min_delay = -64

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

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

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

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

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

次のコマンドによって高配列助教をフォルダー位置へ书き込むことができます。

写(位置,TA);

后で,书き込み済みのファイルから助教を再構築するには,次のコマンドを使用します。

ds =数据存储(位置);TA =高(ds);

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

サポート関数

ほとんどの主要な关数は,インメモリ配列の操作と同じように高大配列を操作できます。ただし,场合によっては,关数での高配列の操作方法が特殊であったり,制限があります。关数が高大配列をサポートするかどうか,および何らかの制限があるかどうかは,「拡张机能“の節にある関数のリファレンスページの下部で確認できます(たとえば,filloutliersを参照してください)。

高配列をサポートするすべてのMATLAB関数の一覧(フィルター処理済み)については,関数リスト(高配列)を参照してください。

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

参考

||||

関連するトピック