主要内容

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

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

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

高的配列とは

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

高的配列の利点

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

メモ

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

高テーブルの作成

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

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

ds = tabularTextDatastore (“airlinesmall.csv”);ds.TreatAsMissing=“不”;ds.SelectedFormats {strcmp (ds.SelectedVariableNames,“TailNum”)} =“%s”;ds.SelectedFormats {strcmp (ds.SelectedVariableNames,“取消代码”)} =“%s”

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

tt =高(ds)
tt=M×29高台年月月日星期天起飞时间CRSDepTime ArrTime ArrTime唯一承运人航班数TailNum实际起飞时间CRSDEPASEDTIME空中时间ARRDEAL DEPDEAL始发地距离滑行取消取消取消取消代码改道承运人延误天气延误NASDLAY安全延误LATELATE LATELATE飞机延误_________研究UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU研究UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu1987年10 213 642 735 727'PS'1508'12'sj308's'NaN NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 1987 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA楠楠0'NA'0楠楠楠1987 10224629630746742'PS'1702'NA'7772楠4-1'SMF'LAX'373楠楠0'NA'0楠楠楠1987 10283144615471448'PS'1729'NA'6165楠59'LAX'SJC'308楠楠楠0'NA'0楠楠楠楠1987 1084930101049'PS'1763'NA'8479-2'SFO'447楠楠楠楠0'NA'0 NaN NaN NaN 1987 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 NaN::::::::::::::::::::::::::::::::::

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

高时间表の作成

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

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

hrs=(tt.DepTime-mod(tt.DepTime,100))/100;min=mod(tt.DepTime,100);tt.Dates=datetime(tt.Year,tt.Month,tt.DayofMonth,hr,min,0);tt(:,1:8)=[];tt=table2timeable(tt)
TT = M×21 tall schedule Dates UniqueCarrier FlightNum TailNum ActualElapsedTime CRSElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode altered CarrierDelay NASDelay SecurityDelay LateAircraftDelay ____________________ _____________ ________________ _________________ _____________________ ________ ________ ______ _____ ________ ______ _______ _________ ________________ ________ ____________ ____________ ________ _____________ _________________ 21 - 10月- 1987 06:42:00“PS”1503“NA”53 57南8 12“宽松”SJC 308年南南“NA”0南南南南南26 - 10月- 1987 10:21:00“PS”1550“NA”63 56南8 296南南“SJC”“钻”0“NA”0 NaN NaN NaN NaN NaN 23-Oct-1987 20:55:00 'PS' 1589 'NA' 83 82 NaN 21 20 'SAN' 'SMF' 480 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN 23-Oct-1987 13:32:00 'PS' 1655 'NA' 59 58 NaN 13 12 'BUR' 'SJC' 296 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN 22-Oct-1987 06:29:00 'PS' 1702 'NA' 77 72 NaN 4 -1 'SMF' 'LAX' 373 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN 28-Oct-1987 14:46:00 'PS' 1729 'NA' 61 65 NaN 59 63 'LAX' 'SJC' 308 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN 08-Oct-1987 09:28:00 'PS' 1763 'NA' 84 79 NaN 3 -2 'SAN' 'SFO' 447 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN 10-Oct-1987 08:59:00 'PS' 1800 'NA' 155 143 NaN 11 -1 'SEA' 'LAX' 954 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN : : : : : : : : : : : : : : : : : : : : : : : :

高配列の作成

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

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

a=TT.ARR延迟
a = M×1 tall双列向量8 8 21 13 4 59 3 11::

関数类基础と関数伊莎贝拉は,高配列の基となるデータ型を特定するのに役立ちます。

遅延評価

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

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

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

m =意味着(,“omitnan”
M =高双?预览延期。学习更多的知识。
s =性病(,“omitnan”
s=高?预览延迟。了解更多信息。
One_sigma_bounds = [m-s m m+s]
one_sigma_bounds = M×N×……高大的数组???...???...? ? ? ... : : : : : : Preview deferred. 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関数の一覧(フィルター処理済み)については,関数リスト(高配列)を参照してください。

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

参考

||||

関連するトピック