主要内容

。

matlab.tall.reduce

データブロックへの削減アルゴリズムの適用による配列の削減

説明

TA.= matlab.tall.reduce(FCN.reducefcnTXは関数FCN.を配列TXの各ブロックに适用し,结果の一部を生成します。次に,この关数は,1つの最终结果TA.が得られるまでreducefcnを结果の一流の垂直连结に缲り返し适适适。

TA.= matlab.tall.reduce(FCN.reducefcnTXTY,...)は,FCN.への入力である複数の配列tX,泰,…を指定します。各配列の同じ行は,fcn (tX (n: m),泰(n: m,:))など,FCN.によって演算されます。高さ1の入力はすべてのFCN.の呼び出しに渡されます。この构文では,FCN.は1つの出力を返さなけれなりなりん。また,reducefcnは1つのつの力を受け入れ1つのつの力を返さばなりません。

TA.结核病,...] = matlab.tall.reduce(FCN.reducefcnTXTY,...)(ここで,FCN.reducefcnは函数のの力を关联有关部)は,それぞれがFCN.reducefcnの出力引数のいずれかに対応する配列TA,TB,...を返します。この构文には以下の要件があります。

  • FCN.matlab.tall.reduceから要求された出力と同じ数の出力を返さなければならない。

  • reducefcnmatlab.tall.reduceから要求された出力と同じ数の入力および出力をもたなければならない。

  • FCN.reducefcnの各出力は,最初の入力TXと同じタイプでなければならない。

  • FCN.reducefcnの対応する出力は同じ高さでなければならない。

TA.结核病,...] = matlab.tall.reduce(___、“OutputsLike”{paPB.,……})は出力TA,TB,...にプロトタイプ配列PA,PB,...と同じデータ型をそれぞれ指定します。前述の構文にある任意の入力引数の組み合わせが使用できます。

すべて折りたたむ

高表を作成し,表から高大ベクトルを抽出して,ベクトル内の要素の合计数を求めます。

Airlinesmall.csv.データセットの高表を作成します。このデータには米国のフライトの到着時刻と出発時刻に関する情報が含まれています。変数ArrDelayを抽出します。これは到着遅延のベクトルです。

ds = tabularTextDatastore ('airlinesmall.csv'“TreatAsMissing”'na');ds.selectedvariablenames = {'arrdelay'“DepDelay”};tt =高(ds);tX = tt.ArrDelay;

matlab.tall.reduceを使用して高大ベクトル内の非要素の合計数をカウントします。最初の関数元素个数はデータの各ブロックにある要素数をカウントし,2-番目の关数は各ブロックのカウントすべてを合計してスカラーの結果を生成します。

s = matlab.tall.reduce(@ numel,@ sum,tx)
s = mxnx ...高级双数组???......???......???... :::::::::

结果をメモリに收集します。

S =收集(S)
using the Local MATLAB Session: - Pass 1 of 1: Completed in 2 sec
s = 123523

高桌子作物成し,その表から2つの高大ベクトルを抽出して各ベクトルの平台値をししししし

Airlinesmall.csv.データセットの高表を作成します。このデータには米国のフライトの到着時刻と出発時刻に関する情報が含まれています。変数ArrDelayDEPDELAY.を抽出します。これらは到着遅延時間と出発遅延時間のベクトルです。

ds = tabularTextDatastore ('airlinesmall.csv'“TreatAsMissing”'na');ds.selectedvariablenames = {'arrdelay'“DepDelay”};tt =高(ds);tt = rmmissing (tt);tX = tt.ArrDelay;泰= tt.DepDelay;

アルゴリズムの最初の段階では,ベクトル内の各データブロックの合計と要素数を計算します。このために2つの入力を受け入れ,各入力の合計と要素数を含む1つの出力を返す関数を作成できます。この関数は,ローカル関数として例の最後にリストされています。

功能Bx = [sum(tx) numel(tx) sum(ty) numel(ty)];结束

アルゴリズムの削减段阶では,中间の合计と要素数をすべて合算する必要があります。したがって,matlab.tall.reduceは,各各力量ベクトルの要素ののとためため,平台の计算単纯な除算なります単纯除算段阶,最初でます得られたでで段阶出得たのののに关节を适用できます。

reducefcn = @(x)的总和(X,1);S = matlab.tall.reduce(@ sumcount,reducefcn,TX,TY)
s = mxnx ...高级双数组???......???......???... :::::::::
S =收集(S)
使用本地MATLAB会话评估高表达: - 通过1的第1条:3.9秒评估完成4.4秒
S =1×4860584 120866 982764 120866

年代の最初の2つの要素はTXの合計と要素数で2番目の2つの要素はTYの合计と要素数です。これらの合计を要素数で除算することにより平均値が得られ,关数意思によって返される答えと比较できます。

My_mean = [s(1)/s(2) s(3)/s(4)]
my_mean =1×27.1201 8.1310
m = gather(mean([tX tY]))
using the Local MATLAB Session: - Pass 1 of 1: Completed in 0.85 sec
m =1×27.1201 8.1310

ローカル关数

以下に,中間の合計と要素数を計算するためにmatlab.tall.reduceが呼び出す关节sumcountを示します。

功能Bx = [sum(tx) numel(tx) sum(ty) numel(ty)];结束

高桌子作物成し,そのデータで各年の平衡フライトフライト遅延遅延遅延し计算ますますますますます。

Airlinesmall.csv.データセットの高桌面作物成作作作作作者しこのは米国のフライト到着时代と出発时代に关键词がれいますますますからからますの行を削除削除欠损欠损データ行行削除削除し欠损欠损欠损欠损し削除しししArrDelay,変数DEPDELAY.,および変数一年を抽出します。これらの変数は,到着遅延と出発遅延のベクトルと,データセット上でフライトごとに关连付けられた年のベクトルです。

ds = tabularTextDatastore ('airlinesmall.csv'“TreatAsMissing”'na');ds.selectedvariablenames = {'arrdelay'“DepDelay”“年”};tt =高(ds);tt = rmmissing (tt);

matlab.tall.reduceを使用して2つの関数を高表に適用します。最初の関数は変数ArrDelayと変数DEPDELAY.を结合して,各フライトの合计平均遅延时间を求めます。关数は,データの各チャンクにある一意の年の数を特定してから,各年を缲り返し处理し,その年のフライトの平均合计遅延时间を计算します。この结果,年と平均合计遅延时间が含まれる2変数テーブルが得られます。この中间データは,年あたりの平均遅延时间になるようにさらに削减する必要があります。この关数を现在のフォルダーにtransform_fcn.mとして保存します。

类型transform_fcn
功能t = transform_fcn(a,b,c)II =聚集(唯一(c));对于k = 1:长度(ii)jj =(c ==i(k));d =均值([a(jj)b(jj)],2);如果k == 1 t = table(c(jj),d,'variablenames',{'年''incomdelay'});否则t = [t;表(c(jj),d,'variablenames',{'一年'incomdelay'})];结束结束

2番目の関数は最初の関数の結果を使用して,各年の平均合計遅延時間を計算します。recument_fcn.からの出力はtransform_fcnからの出力と互换性があるため,データのブロックは任意の顺番で连结でき,各年につき1行のみになるまで継続的に削减できます。

类型recument_fcn.
函数tt = recens_fcn(t)[组,y] = findgroups(t.year);d = sclustapply(@mean,t.meandelay,组);tt =表(y,d,'variablenames',{'年''incomdelay'});结束

変换关数と减少关数を高大ベクトルに适用します。入力(双倍的型)と出力(表格型)には异なるデータ型があるため“OutputsLike”の名前と値のペアを使用して出力が表であることを指定します。出力の型を指定する簡単な方法は、ダミー入力を使用した変換関数の呼び出しです。

A = tt.ArrDelay;B = tt.DepDelay;C = tt.Year;D1 = matlab.tall.reduce(@transform_fcn,@reduce_fcn,A,B,C,“OutputsLike”,{transform_fcn(0,0,0)})
d1 = Mx2高表年份MeanDelay ____ _________ ??????: : : :

结果をメモリに收集して,年あたりの平均合计フライト遅延时间を确认します。

d1 =收集(d1)
评估使用本地MATLAB会话高大的表达: - 通行证1:1.8秒完成评估在2.1秒完成
D1 =22×2表年份MeanDelay ____ _________ 1987 7.6889 1988 6.7918 1989 8.0757 1990 7.1548 1991 4.0134 1992 5.1767 1993 5.4941 1994 6.0303 1995 8.4284 1996 9.6981 1997 8.4346 1998 8.3789 1999 8.9121 2000 10.595 2001 6.8975 2002 3.4325⋮

别のアプローチ

同じ同じ统计をグループグループ别に计算する别方法は,裂开をを用してmatlab.tall.reduceを呼び出すことです(matlab.tall.reduceをを用して裂开を呼び出すのではなく)。

このアプローチを使使用して,findgroups裂开をデータに対して直接呼び出します。データの各グループで演算を行う関数mySplitFcnにはmatlab.tall.reduceへの呼び出しが含まれます。matlab.tall.reduceに采用される変换关数と减少关数はデータをグループ化する必要がないため,これらの关数は裂开によって渡される,事前にグループ化されたデータで计算を実行するだけです。

类型mySplitFcn
mySplitFcn(a,b,c) . mySplitFcn(a,b,c) . mySplitFcn(a,b,c)。减少(@non_group_transform_fcn @non_group_reduce_fcn,……a, b, c, 'OutputsLike', {non_group_transform_fcn(0,0,0)});函数t = non_group_transform_fcn(a,b,c) d = mean([a b], 2);t = table(c,d,'VariableNames',{'Year' 'MeanDelay'});end函数TT = non_group_reduce_fcn(t) D = mean(t. meandelay);TT = table(t.Year(1),D,'VariableNames',{'Year' 'MeanDelay'});结束结束

findgroups裂开を呼び出してデータで演算を行い,mySplitFcnをデータの各グループに适用します。

基团= findgroups(C);D2 = splitapply(@mySplitFcn,A,B,C,基团);D2 =聚集(d2)的
评估使用本地MATLAB会话高表达: - 通的2 1:完成在0.77秒 - 第二遍2:在2.2秒评价完成在3.7秒完成
D2 =22×2表年份MeanDelay ____ _________ 1987 7.6889 1988 6.7918 1989 8.0757 1990 7.1548 1991 4.0134 1992 5.1767 1993 5.4941 1994 6.0303 1995 8.4284 1996 9.6981 1997 8.4346 1998 8.3789 1999 8.9121 2000 10.595 2001 6.8975 2002 3.4325⋮

重みのベクトルを使用して,高配列の重み付け標準偏差と分散を計算します。これは,matlab.tall.reduceを使用して高的配列でまだサポートされていない机能を回避する一例です。

ランダムデータの2つの高大ベクトルベクトル作物成しし。TXにはランダムデータ,tP的には対応する确率(SUM(TP)1など)が含まれます。これらの确率はデータへの重み付けに适しています。

RNG.默认tX =高(兰德(1 e4, 1));p =兰德(1 e4, 1);tP =高(正常化(p,'规模',之和(p)));

入力と等しい出力を返す関数身份を記述します。このアプローチは,matlab.tall.reduceの変换ステップを省略し,データサイズ削减のためにリダクション关数が缲り返し适用される,削减ステップに直接データを渡します。

类型IdentityTransform.m.
函数[A,B] = identityTransform(X,Y);B = Y;结束

次に、高ベクトルのブロックで演算を行うリダクション関数を記述し,重み付け分散と標準偏差を計算します。

类型weightedStats.m
函数[wvar,WSTD] = weightedStats(X,P)= wvar VAR(X,P);WSTD = STD(X,P);结束

matlab.tall.reduceを使用してこれらの关数を高大ベクトルでデータのブロックに适用します。

[tx_var_weighted,tx_std_wuighted] = matlab.tall.reduce(@idertitytransform,@weightedstats,tx,tp)
tx_var_weighted = mxnx ...高级双数组???......???......???... :::::::txstd_weighted = mxnx ...高级双数组? ? ? ... ? ? ? ... ? ? ? ... : : : : : :

入力数

すべて折りたたむ

適用する変換関数。关数ハンドルまたは無名関数として指定します。FCN.の各出力は最初の入力TXと同じタイプでなければなりません。“OutputsLike”オプションを使用してさまざまなデータ型の出力を返すことができます。FCN.が複数の出力を返す場合,それらの出力はすべて同じ高さをもたなければなりません。

FCN.の一般的な関数シグネチャは,次のとおりです。

[a, b, c,…]= fcn(x, y, z, ...)
FCN.は以下の要件を満たさなければなりません。

  1. 入力数- 入力[x,y,z,...]は,メモリに收まるデータのブロックです。ブロックは,高大的配列の入力[TX,TY,TZ,...]それぞれからデータを抽出することによって生成されます。入力[x,y,z,...]は次の特性を満たします。

    • [x,y,z,...]はすべて,任意の可能な拡張後の最初の次元が同じサイズをもつ。

    • [x,y,z,...]のデータブロックは,高配列の高次元が1ではないと仮定した場合,高次元の同じインデックスから得られる。たとえば,TXTYの高大次元が1ではないではない合,ブロックの最初のセットはX = TX(1:20000,:)およびY = TY(1:20000,:)になる可能性があります。

    • [TX,TY,TZ,...]のいずれかの最初の次元がサイズ1である場合,対応するブロック[x,y,z,...]は,その高大的配列内のすべてのデータで构成される。

  2. 出力数- 出力[a, b, c,…]はメモリに収まるブロックで,それぞれの出力[tA, tB, tC,…]に送信されます。出力[a, b, c,…]は以下の特性を満たします。

    • [a, b, c,…]はすべて,最初の次元が同じサイズでなければならない。

    • [a, b, c,…]はすべて,FCN.の以前の呼び出しの结果とそれぞれ垂直方向に连结される。

    • [a, b, c,…]はすべて,それぞれの出力先で,出力配列の最初の次元にある同じインデックスに送信される。

  3. 关数ルール- - - - - -FCN.は关数ルールを満たさなければなりません。

    • F([输入1; inputs2])== [F(输入1);F(inputs2)]:入力の连结に关数を适用することは,入力に关数を个别に适用してから结果を连结する场合と同じでなければならない。

  4. 空の入力- - - - - -FCN.が高さ0の入力を处理できることを确认します。空の入力は,ファイルが空の场合や,データに対して数多くのフィルター处理を行った场合に発生することがあります。

たとえば,この关圈2つのつの力配列をて,二乘し,2つの出力配列を返し返し。

功能[xx,yy] = sqInputs(x,y) xx = x.^2;yy = y ^ 2;结束
この関数をアクセス可能なフォルダーに保存した後,この関数を呼び出してTXTYを二乘し,次のコマンドで最大値を求めることができます。
TA = matlab.tall.reduce(@sqInputs,@Max,TX,TY)

例:tc = matlab.tall.reduce(@ numel,@ sum,tx,ty)は各ブロック内の要素数を検出し,结果を合计して要素の合计数をカウントします。

データ型:function_handle

适用するリダクション关数。关数ハンドルまたは无名关数として指定します。reducefcnの各出力は最初の入力TXと同じタイプでなければなりません。“OutputsLike”オプションを使用してさまざまなデータ型の出力を返すことができます。reducefcnが複数の出力を返す場合,それらの出力はすべて同じ高さをもたなければなりません。

reducefcnの一般的な関数シグネチャは,次のとおりです。

[RA,RB,RC,...]= reducefcn(a, b, c, ...)
reducefcnは以下の要件を満たさなければなりません。

  1. 入力数- 入力[a, b, c,…]はメモリに收まるブロックです。データのブロックは,FCN.によって返されるれる力量か,さらなる缩小のために再度される,ある程序度小されreducefcnからの出力のいずれかです。入力[a, b, c,…]は次の特性を満たします。

    • 入力[a, b, c,…]は,最初の次元が同じサイズとなる。

    • 最初の次元の特定インデックスについて,データ[a, b, c,…]のブロックの各行はは力から生长する,またはreducefcnに対する以前の同じ呼び出しから派生する。

    • 最初の次元の特定インデックスについて,そのインデックスの入力[a, b, c,…]の各行は,最初の次元の同じインデックスから派生する。

  2. 出力数——すべての出力[RA,RB,RC,...]は,最初の次元が同じサイズでなければなりません。さらに,必要に応じて縮小を繰り返すことができるように,それぞれの入力[a, b, c,…]と垂直方向に结合可能でなければなりません。

  3. 关数ルール- - - - - -reducefcnは,以下の関数ルールを満たさなければなりません(丸め誤差を含む)。

    • F(输入)== F(F(输入)):同じ入力に繰り返し関数を適用しても,結果が変わってはならない。

    • f([输入1;输入2])== f([输入2;输入1]):结果が,连结の顺序に依存することがあってはならない。

    • F([INPUT1;输入2])== F([F(输入1); F(输入2)]):いくつかの中間結果の連結に関数を1回適用することは,それを別々に適用し,連結し,再び適用することと同じでなければならない。

  4. 空の入力- - - - - -reducefcnが高さ0の入力を处理できることを确认します。空の入力は,ファイルが空の场合や,データに対して数多くのフィルター处理を行った场合に発生することがあります。この呼び出しでは,すべての入力ブロックは,最初の次元以外で正しい型とサイズをもつ空の配列となります。

适切なリダクション关键词例には,prod马克斯などの組み込みの次元リダクション関数があります。これらの関数はFCN.で生成された中間結果を操作し,单一スカラーを返すことができます。これらの関数には,連結の行われる順序とリダクション演算の適用回数によって最終的な答えは変化しないという特性があります。意思var.などの一部の関数は,リダクション演算の適用回数によって最終的な答えが変化する可能性があるため,通常はリダクション関数として使用しないでください。

例:tc = matlab.tall.reduce(@ numel,@ sum,tx)は,各ブロック内の要素数を検出し,结果を合计して要素の合计数をカウントします。

データ型:function_handle

入力配列。スカラー、ベクトル、行程または多次元配列として指定します。入力配列は変換関数FCN.の入力として使用されます。各入力配列tX,泰,…の高さに互换性がなければなりません。高さが同じであるか,一方の入力が高さ1である场合,2つの入力の高さは互换性があります。

出力配列のプロトタイプ。配列として指定します。“OutputsLike”ををする场合,matlab.tall.reduceでで返される力配列TA,TB,...は,指定した配列{PA,PB,...}と同じデータ型と属性をもちます。

例:TA = matlab.tall.reduce(FCN,reducefcn,TX, 'OutputsLike',{INT8(1)});のの合,TXは倍精锐高大配列であり,TA.双倍的ではなくINT8としてとしてます。

出力数

すべて折りたたむ

出力配列。スカラー、ベクトル、行程、または多次元配列として返されます。matlab.tall.reduceへのいずれかの入力が高の場合,すべての出力引数も高となります。それ以外の場合,すべての出力引数はインメモリ配列になります。

出力配列のサイズとデータはは指定た关键FCN.reducefcnによって异なります。一般的に,出力TA,TB,...はすべて,最初の入力TXと同じデータ型をもたなければなりません。ただし,“OutputsLike”を指定して異なるデータ型を返すことができます。出力配列TA,TB,...はすべて同じ高さをもちます。

詳細

すべて折りたたむ

高配列ブロック

データストア高大配列配列作物成作作作作作作作作后,データ中のデータストア移がになります。“ブロック” または“チャンク” と呼ばれる别々の要素に分かれて移动します。各ブロックはメモリに收容可能な连続する行のセットです。たとえば,2次元配列の1ブロック(表など)は,一部の添字nおよびについてx(n:m,:)です。各ブロックのサイズはデータストアの阅读プロパティの値に基づいていますが,ブロックは厳密にそのサイズではない场合があります。matlab.tall.reduceの目的において,妥尔配列は该当する多くのブロックの垂直连结であるとみなされます。

たとえば,关数を変换关节数として使用する料,中间结果は“ブロックごとの” 合计になります。そのため,要素の合计として単一のスカラー値を返すのではなく,结果はブロック数と等しい长さをもつベクトルになります。

ds = tabularTextDatastore ('airlinesmall.csv'“TreatAsMissing”'na');ds.selectedvariablenames = {'arrdelay'“DepDelay”};tt =高(ds);tX = tt.ArrDelay;F = @(x)'omitnan');s = matlab.tall.reduce(f,@(x)x,tx);S =收集(S)
S = 140467 101065 164355 135920 111182 186274 21321

R2018Bで导入