matlab.tall.transform
関数ハンドルをデータのブロックに適用して配列を変換します。
構文
説明
例
matlab.tall.transform を使用して、別の配列と同様の属性をもつゼロの tall 配列を作成します。
airlinesmall.csv データ セットの tall table を作成します。このデータには米国のフライトの到着時刻と出発時刻に関する情報が含まれています。変数 ArrDelay を抽出します。これは到着遅延のベクトルです。
ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA'); ds.SelectedVariableNames = {'ArrDelay' 'DepDelay'}; tt = tall(ds); tX = tt.ArrDelay
tX =
M×1 tall double column vector
8
8
21
13
4
59
3
11
:
:
入力と同じサイズと同じデータ型をもつゼロの配列を作成する無名関数を書き込みます。
zerosLike = @(in) zeros(size(in),'like',in);matlab.tall.transform を使用して関数 zerosLike を到着遅延時間のベクトルに適用します。結果は、同じサイズの tall ベクトルになりますが、その値はすべて 0 です。
s = matlab.tall.transform(zerosLike, tX)
s =
M×1 tall double column vector
0
0
0
0
0
0
0
0
:
:
到着遅延時間と出発遅延時間のベクトルから平均の合計フライト遅延時間を計算します。
airlinesmall.csv データ セットの tall table を作成します。このデータには米国のフライトの到着時刻と出発時刻に関する情報が含まれています。変数 ArrDelay と DepDelay を抽出します。これらは到着遅延時間と出発遅延時間のベクトルです。
ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA'); ds.SelectedVariableNames = {'ArrDelay' 'DepDelay'}; tt = tall(ds); tX = tt.ArrDelay; tY = tt.DepDelay;
関数 meanDelay は入力ベクトルを 1 つの行列に連結して、各行の値 (NaN は無視する) を合計した後、平均を計算します。その関数ファイルの内容を表示します。
type meanDelayfunction D = meanDelay(a,b) X = [a b]; Y = sum(X,2,'omitnan'); D = mean(Y); end
matlab.tall.transform を使用して関数 meanDelay を tX および tY 内の各データ ブロックに適用します。結果は、各データ ブロックの平均合計遅延時間になります。
d = matlab.tall.transform(@meanDelay, tX, tY)
d = 7×1 tall double column vector 14.0621 11.1639 17.2311 15.1852 12.5860 19.8596 14.4036
この演算は、各データ ブロックをスカラー値まで削減した結果がメモリに収まるものと仮定しています。極端に大きいデータ セットや小さなブロック サイズを使用するデータ セットの場合、この仮定が当てはまらない場合があります。
データの各行の最大値とその値のインデックスを求めます。
airlinesmall.csv データ セットの tall table を作成します。このデータには米国のフライトの到着時刻と出発時刻に関する情報が含まれています。変数 ArrDelay と DepDelay を抽出します。これらは到着遅延時間と出発遅延時間のベクトルです。
ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA'); ds.SelectedVariableNames = {'ArrDelay' 'DepDelay'}; tt = tall(ds); tX = tt.ArrDelay; tY = tt.DepDelay;
関数 maxDelay は入力ベクトルを連結した後に、最大到着遅延時間または最大出発遅延時間とその列インデックスを求めます。そのファイルの内容を表示します。
type maxDelayfunction [M,I] = maxDelay(A,B) X = [A B]; [M,I] = max(X,[],2); end
matlab.tall.transform を使用して関数 maxDelay を tX および tY 内の各データ ブロックに適用します。結果は、データの各行の最大到着遅延時間または最大出発遅延時間、および最大値が取得された列を示すインデックス ベクトルになります。インデックス 1 はその行の到着遅延時間の方が長いことを示し、インデックス 2 は出発遅延時間の方が長いことを示します。
[M, idx] = matlab.tall.transform(@maxDelay, tX, tY)
M =
M×1 tall double column vector
12
8
21
13
4
63
3
11
:
:
idx =
M×1 tall double column vector
2
1
1
1
1
2
1
1
:
:
'OutputsLike' オプションを使用して、入力 table と変数が異なる matlab.tall.transform から table を返します。
乱数値の 2 つの変数をもつ tall table を作成します。
T = tall(table(rand(1e6,1),rand(1e6,1)))
T =
1,000,000×2 tall table
Var1 Var2
_______ _______
0.81472 0.90399
0.90579 0.94095
0.12699 0.80252
0.91338 0.24205
0.63236 0.97566
0.09754 0.31723
0.2785 0.81279
0.54688 0.69743
: :
: :
関数 tableDiff は、2 つの入力 table 変数の差を計算し、結果を table の新しい変数として追加します。ファイルの内容を表示します。
type tableDifffunction Tout = tableDiff(Tin) d = Tin.Var2 - Tin.Var1; Tin.Var3 = abs(d); Tout = Tin; end
matlab.tall.transform を使用して関数 tableDiff を T 内の各データ ブロックに適用します。出力 table には入力 table からのさまざまな変数があるため、'OutputsLike' の名前と値のペアを使用して類似した変数をもつプロトタイプの table を出力として指定します (既定の名前が Var1、Var2、および Var3 の 3 つの変数)。
Z = matlab.tall.transform(@tableDiff, T, 'OutputsLike', {table(1,1,1)})Z =
M×3 tall table
Var1 Var2 Var3
_______ _______ ________
0.81472 0.90399 0.089267
0.90579 0.94095 0.035156
0.12699 0.80252 0.67553
0.91338 0.24205 0.67133
0.63236 0.97566 0.3433
0.09754 0.31723 0.21969
0.2785 0.81279 0.53429
0.54688 0.69743 0.15054
: : :
: : :
入力引数
適用する変換関数。関数ハンドルまたは無名関数として指定します。fcn の各出力は最初の入力 tX と同じタイプでなければなりません。'OutputsLike' オプションを使用してさまざまなデータ型の出力を返すことができます。fcn が複数の出力を返す場合、それらの出力はすべて同じ高さをもたなければなりません。
fcn の一般的な関数シグネチャは、次のとおりです。
[a, b, c, ...] = fcn(x, y, z, ...)
fcn は以下の要件を満たさなければなりません。
入力引数 — 入力
[x, y, z, ...]は、メモリに収まるデータのブロックです。ブロックは、tall 配列の入力[tX, tY, tZ, ...]それぞれからデータを抽出することによって生成されます。入力[x, y, z, ...]は次の特性を満たします。[x, y, z, ...]はすべて、任意の可能な拡張後の最初の次元が同じサイズをもつ。[x, y, z, ...]のデータ ブロックは、tall 配列の tall 次元が 1 ではないと仮定した場合、tall 次元の同じインデックスから得られる。たとえば、tXとtYの tall 次元が 1 ではない場合、ブロックの最初のセットはx = tX(1:20000,:)およびy = tY(1:20000,:)になる可能性があります。[tX, tY, tZ, ...]のいずれかの最初の次元がサイズ1である場合、対応するブロック[x, y, z, ...]は、その tall 配列内のすべてのデータで構成される。
出力引数 — 出力
[a, b, c, ...]はメモリに収まるブロックで、それぞれの出力[tA, tB, tC, ...]に送信されます。出力[a, b, c, ...]は以下の特性を満たします。[a, b, c, ...]はすべて、最初の次元が同じサイズでなければならない。[a, b, c, ...]はすべて、fcnの以前の呼び出しの結果とそれぞれ垂直方向に連結される。[a, b, c, ...]はすべて、それぞれの出力先で、出力配列の最初の次元にある同じインデックスに送信される。
関数ルール —
fcnは関数ルールを満たさなければなりません。F([inputs1; inputs2]) == [F(inputs1); F(inputs2)]:入力の連結に関数を適用することは、入力に関数を個別に適用してから結果を連結する場合と同じでなければならない。
空の入力 —
fcnが高さ 0 の入力を処理できることを確認します。空の入力は、ファイルが空の場合や、データに対して数多くのフィルター処理を行った場合に発生することがあります。
たとえば、この関数は 2 つの入力配列を受け入れて、二乗し、2 つの出力配列を返します。
function [xx,yy] = sqInputs(x,y) xx = x.^2; yy = y.^2; end
tX と tY を次のコマンドで二乗できます。[tA,tB] = matlab.tall.transform(@sqInputs,tX,tY)
例: tA = matlab.tall.transform(@(x) x .* 2, tX) は tX の値を 2 で乗算する無名関数を指定します。
例: tC = matlab.tall.transform(@plus,tX,tY) は 2 つの配列を同時に追加する関数ハンドル @plus を指定します。
データ型: function_handle
入力配列。スカラー、ベクトル、行列または多次元配列として指定します。入力配列は、指定した関数 fcn への入力として使用されます。各入力配列 tX,tY,... の高さに互換性がなければなりません。高さが同じであるか、一方の入力が高さ 1 である場合、2 つの入力の高さは互換性があります。
出力配列のプロトタイプ。配列として指定します。'OutputsLike' を指定する場合、matlab.tall.transform で返される出力配列 tA,tB,... は、指定した配列 {PA,PB,...} と同じデータ型をもちます。
例: tA = matlab.tall.transform(fcn,tX,'OutputsLike',{int8(1)}); の場合、tX は倍精度配列であり、A を double ではなく int8 として返します。
出力引数
出力配列。スカラー、ベクトル、行列、または多次元配列として返されます。matlab.tall.transform へのいずれかの入力が tall の場合、すべての出力引数も tall となります。それ以外の場合、すべての出力引数はインメモリ配列になります。
出力配列のサイズとデータ型は指定した関数 fcn によって異なります。一般的に、出力 tA,tB,... はすべて、最初の入力 X と同じデータ型をもたなければなりません。ただし、'OutputsLike' を指定して異なるデータ型を返すことができます。出力配列 tA,tB,... はすべて同じ高さをもちます。
詳細
データストアから tall 配列を作成すると、基となるデータストアによって、計算中のデータの移動が容易になります。データは "ブロック" または "チャンク" と呼ばれる別々の要素に分かれて移動します。各ブロックはメモリに収容可能な連続する行のセットです。たとえば、2 次元配列の 1 ブロック (table など) は、一部の添字 n および m について X(n:m,:) です。各ブロックのサイズはデータストアの ReadSize プロパティの値に基づいていますが、ブロックは厳密にそのサイズではない場合があります。matlab.tall.transform の目的において、tall 配列は該当する多くのブロックの垂直連結であるとみなされます。

たとえば、関数 sum を変換関数として使用する場合、結果は "ブロックごとの" 合計になります。そのため、要素の合計として単一のスカラー値を返すのではなく、結果はブロック数と等しい長さをもつベクトルになります。
ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA'); ds.SelectedVariableNames = {'ArrDelay' 'DepDelay'}; tt = tall(ds); tX = tt.ArrDelay; f = @(x) sum(x,'omitnan'); s = matlab.tall.transform(f, tX); s = gather(s)
s =
140467
101065
164355
135920
111182
186274
21321バージョン履歴
R2018b で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)