このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
matlab.tall.movingWindow
構文
説明
[
。ここで tA
,tB
,...] = matlab.tall.movingWindow(fcn
,window
,tX
,tY
,...)fcn
は、複数の出力を返し、それぞれが fcn
の出力引数のいずれかに対応する配列 tA,tB,...
を返す関数ハンドルです。fcn
への入力は、引数 tX, tY, ...
のデータ ウィンドウです。この構文には以下の要件があります。
fcn
はmatlab.tall.movingWindow
から要求された出力と同じ数の出力を返さなければならない。fcn
の各出力は最初のデータ入力tX
と同じ型でなければならない。すべての出力
tA,tB,...
は同じ高さでなければならない。
[___] = matlab.tall.movingWindow(___,
は、前述の任意の構文を使用して、1 つ以上の名前と値のペアの引数による追加オプションを指定します。たとえば、ウィンドウ間のステップ サイズを調整するには、Name,Value
)'Stride'
およびスカラーを指定できます。あるいは、ウィンドウの要素数が足りない場合の端点の処理を変更するには、'EndPoints'
および有効なオプション ('shrink'
、'discard'
、または数値のパディング値) を指定できます。
例
tall 配列を使用した移動ウィンドウの計算
matlab.tall.movingWindow
を使用して、航空機の到着遅延および出発遅延の移動中央値を計算します。
airlinesmall.csv
データ セットのデータストアを作成し、それを tall 配列に変換します。このデータには米国のフライトの到着時刻と出発時刻に関する情報が含まれています。フライト遅延のベクトルである、変数 ArrDelay
および DepDelay
を抽出し、各遅延が個々の列に含まれる tall 配列を作成します。
varnames = {'ArrDelay', 'DepDelay'}; ds = tabularTextDatastore('airlinesmall.csv', 'TreatAsMissing', 'NA', ... 'SelectedVariableNames', varnames); tt = tall(ds); tX = [tt.ArrDelay tt.DepDelay]
tX = Mx2 tall double matrix 8 12 8 1 21 20 13 12 4 -1 59 63 3 -2 11 -1 : : : :
matlab.tall.movingWindow
を使用して、最初の次元のデータの移動中央値を計算します。ウィンドウ サイズ 5,000 を使用します。
fcn = @(x) median(x,1,'omitnan');
tA = matlab.tall.movingWindow(fcn,5000,tX)
tA = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : :
結果の一意の行をメモリに収集します。
tA = gather(unique(tA,'rows'))
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 2: Completed in 1.3 sec - Pass 2 of 2: Completed in 45 sec Evaluation completed in 46 sec
tA = 31×2
-4.0000 -2.0000
-3.5000 -2.0000
-3.0000 -2.0000
-3.0000 -1.5000
-3.0000 -1.0000
-3.0000 -0.5000
-3.0000 0
-2.5000 -1.0000
-2.5000 0
-2.0000 -1.0000
⋮
複数の出力をもつウィンドウ関数の適用
matlab.tall.movingWindow
を使用して、複数の出力をもつ関数をデータ ウィンドウに適用します。
インメモリ ランダム行列から tall 配列を作成します。
X = rand(1000,5); tX = tall(X)
tX = 1,000x5 tall double matrix 0.8147 0.6312 0.7449 0.3796 0.4271 0.9058 0.3551 0.8923 0.3191 0.9554 0.1270 0.9970 0.2426 0.9861 0.7242 0.9134 0.2242 0.1296 0.7182 0.5809 0.6324 0.6525 0.2251 0.4132 0.5403 0.0975 0.6050 0.3500 0.0986 0.7054 0.2785 0.3872 0.2871 0.7346 0.0050 0.5469 0.1422 0.9275 0.6373 0.7825 : : : : : : : : : :
最初の次元の各データ ウィンドウの合計値、平均値、中央値、および最頻値を求める関数を作成します。各出力は、最初の次元のサイズが同じでなければなりませんが、他の次元のサイズは異なっていてもかまいません。各データ ウィンドウについて、合計の計算ではスカラーが生成され、他の計算では 1
行 N
列のベクトルが生成されます。
関数をローカル ワークスペースに保存します。
function [S,mn,mdn,md] = mystats(X) S = sum(X,[2 1]); mn = mean(X,1); mdn = median(X,1); md = mode(X,1); end
メモ: この関数は、ローカル関数として例の最後に含まれています。
matlab.tall.movingWindow
を使用して、ウィンドウ サイズが 250 のデータに対して関数 mystats
を適用します。mystats
からのすべての出力が返されるよう、4 つの出力引数を指定します。'EndPoints'
の名前と値のペアを使用して、不完全なウィンドウを破棄します。
[tS,tmn,tmdn,tmd] = matlab.tall.movingWindow(@mystats, 250, tX, 'EndPoints', 'discard')
tS = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : : tmn = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : : tmdn = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : : tmd = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : :
function [S,mn,mdn,md] = mystats(X) S = sum(X,[2 1]); mn = mean(X,1); mdn = median(X,1); md = mode(X,1); end
入力引数
fcn
— 適用するウィンドウ関数
関数ハンドル | 無名関数
適用するウィンドウ関数。関数ハンドルまたは無名関数として指定します。fcn
の各出力は最初の入力 tX
と同じタイプでなければなりません。'OutputsLike'
オプションを使用してさまざまなデータ型の出力を返すことができます。
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 配列内のすべてのデータで構成される。fcn
を適用した結果、入力データはスカラーまたは高さ 1 の配列のスライスに削減されなければならない。入力が行列、N 次元配列、table、または timetable である場合、
fcn
を適用することで、その各列または各変数における入力データが削減されなければなりません。
出力引数 — 出力
[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)]
:入力の連結に関数を適用することは、入力に関数を個別に適用してから結果を連結する場合と同じでなければならない。
たとえば、この関数はウィンドウ内の要素の平均および標準偏差を計算し、2 つの出力配列を返します。
function [mv,sd] = movstats(tX) mv = mean(tX,1,'omitnan'); sd = std(tX,1,'omitnan'); end
[tA,tB] = matlab.tall.movingWindow(@movstats,5,tX)
例: tA = matlab.tall.movingWindow(@(x) std(x,1,'omitnan'), tX)
は、NaN
を無視して、各ウィンドウの標準偏差を計算するための無名関数を指定します。
例: tA = matlab.tall.movingWindow(@mean,3,tX)
は、3 要素の各ウィンドウの平均値を計算するために、関数ハンドル @mean
を指定します。
データ型: function_handle
window
— ウィンドウ サイズ
正の整数スカラー | 2 要素の行ベクトル
ウィンドウ サイズ。正の整数スカラーまたは 2 要素の行ベクトル [NB NF]
として指定します。
window
がスカラーの場合、次のようになります。ウィンドウ サイズが奇数である場合、各ウィンドウはデータ内の対応する要素を中心にして配置されます。
ウィンドウ サイズが偶数である場合、各ウィンドウは現在の要素および直前の要素を中心にして配置されます。
window
がベクトル[NB NF]
である場合、ウィンドウには入力の直前のNB
の要素、現在の要素、および次のNF
の要素が含まれます。
既定では、ウィンドウを埋めるのに十分な数の要素がない場合、ウィンドウ サイズは自動的に端点で打ち切られます。ウィンドウがこのように打ち切られる場合、関数はウィンドウを埋めている要素に対してのみ演算を実行します。EndPoints
の名前と値のペアを使用してこの動作を変更できます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
tX
, tY
— 入力配列 (個別の引数として)
スカラー | ベクトル | 行列 | 多次元配列 | table | timetable
入力配列。スカラー、ベクトル、行列、多次元配列、table、または timetable の個別の引数として指定します。入力配列は、tall 配列またはインメモリ配列にできます。入力配列は変換関数 fcn
の入力として使用されます。各入力配列 tX,tY,...
は同じ高さでなければなりません。
名前と値の引数
引数のオプションのペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name
を引用符で囲みます。
例: tA = matlab.tall.movingWindow(@myFcn, window, tX, 'Stride', 2)
Stride
— ウィンドウ間のステップ サイズ
1
(既定値) | 正の整数スカラー
ウィンドウ間のステップ サイズ。'Stride'
と正の整数スカラーで構成されるコンマ区切りのペアとして指定します。データ ウィンドウに対して fcn
の演算を実行した後、次のウィンドウの演算を実行する前に、'Stride'
値の分だけ計算が進められます。'Stride'
の値を既定値の 1 から増やすと、要素を 1 つおき、3 つおき、などのように取り出して出力サイズを削減することと同じになります。
既定では、'Stride'
の値は 1
であるため、各ウィンドウは入力の各要素を中心にして配置されます。たとえば、ベクトル [1 2 3 4 5 6]'
に対して実行したウィンドウ サイズが 3 の移動合計の計算を次に示します。
'Stride'
の値が 2
の場合、計算が変わり、各ウィンドウは、入力の 2 つ目ごとの要素 (1、3、5) を中心として配置されます。この場合、移動合計は 6 個ではなく 3 個の部分和を返します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
EndPoints
— 先頭および末尾のウィンドウを処理する方法
'shrink'
(既定値) | 'discard'
| パディング値
先頭および末尾のウィンドウを処理する方法。'EndPoints'
と次の表のいずれかの値で構成されるコンマ区切りのペアとして指定します。
ウィンドウ計算の開始時および終了時において、演算される要素のウィンドウは不完全となります。'EndPoints'
オプションは、これらの不完全なウィンドウの処理方法を指定します。
'EndPoints' 値 | 説明 | 例: 移動合計値 |
---|---|---|
| 入力の端点付近のウィンドウのサイズを縮小し、既存の要素のみを含めます。 | |
| 既存の要素とウィンドウが完全にオーバーラップしない場合、結果を出力しません。 | |
数値または logical のパディング値 | 存在しない要素を指定した数値または論理値に置き換えます。
|
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
| string
OutputsLike
— 出力配列のプロトタイプ
cell 配列
出力配列のプロトタイプ。'OutputsLike'
およびプロトタイプ配列を含む cell 配列で構成されるコンマ区切りのペアとして指定します。'OutputsLike'
を指定する場合、matlab.tall.movingWindow
で返される出力配列 tA,tB,...
は、指定したプロトタイプ配列 {PA,PB,...}
と同じデータ型と属性をもちます。出力配列のデータ型が入力配列のデータ型と異なる場合は常に 'OutputsLike'
を指定しなければなりません。'OutputsLike'
を指定した場合は、各出力のプロトタイプ配列を指定しなければなりません。
例: tA = matlab.tall.movingWindow(..., tX, 'OutputsLike', {int8(1)});
の場合、tX
は倍精度 tall 配列であり、tA
を double
ではなく int8
として返します。
データ型: cell
出力引数
tA
, tB
— 出力配列
スカラー | ベクトル | 行列 | 多次元配列
出力配列。スカラー、ベクトル、行列、または多次元配列として返されます。matlab.tall.movingWindow
へのいずれかの入力が tall の場合、すべての出力引数も tall となります。それ以外の場合、すべての出力引数はインメモリ配列になります。
出力配列のサイズとデータ型は指定したウィンドウ関数
fcn
によって異なります。出力配列
tA,tB,...
の高さはすべて同じになります。高さは'Stride'
および'EndPoints'
の値によって異なります。既定では、出力配列は入力配列と同じサイズです。一般的に、出力
tA,tB,...
はすべて、最初の入力tX
と同じデータ型をもたなければなりません。ただし、'OutputsLike'
を指定して異なるデータ型を返すことができます。入力配列tX, tY, ...
が空の場合、または'EndPoints'
が'discard'
で、フルサイズのウィンドウを埋める十分な要素がない場合、matlab.tall.movingWindow
は空の出力を返します。空の出力のサイズは、入力配列tX
、または'OutputsLike'
に指定されるプロトタイプ配列 (指定されている場合) のサイズに基づきます。
ヒント
単純なスライディング ウィンドウの計算では
matlab.tall.movingWindow
を使用します。matlab.tall.blockMovingWindow
は、tall 配列に対して、より柔軟にスライディング ウィンドウの計算を実行するように設計された高度な API です。したがって、関数は、完全なウィンドウを多数含むデータ ブロックを正確に処理しなければならないため、使用が複雑になります。ただし、適切にベクトル化された計算では、必要な関数呼び出しの数を減らし、パフォーマンスを向上できます。
バージョン履歴
R2019a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)