メインコンテンツ

movprod

説明

M = movprod(A,k) は局所 k 点における積を返します。各積は、長さ k のスライディング ウィンドウにわたる A の隣接要素から計算されます。M のサイズは A と同じです。

k が奇数である場合、ウィンドウは現在位置にある要素を中心にして配置されます。k が偶数である場合、ウィンドウは現在の要素および直前の要素を中心にして配置されます。ウィンドウを埋めるのに十分な数の要素がない場合、ウィンドウ サイズは自動的に端点で打ち切られます。ウィンドウが打ち切られた場合、積はウィンドウを埋めている要素のみから取得されます。

  • A がベクトルである場合、movprod はベクトル A の長さに沿って演算します。

  • A が多次元配列の場合、movprod は、サイズが 1 に等しくない A の最初の次元に沿って演算します。

  • A が table または timetable の場合、movprodA の変数に沿って演算します。 (R2025a 以降)

M = movprod(A,[kb kf]) は長さが kb+kf+1 のウィンドウにおける積を計算します。このウィンドウには現在位置の要素、kb 個前までの要素、kf 個後までの要素が含まれます。

M = movprod(___,dim) は、前述の任意の構文について、演算の対象とする A の次元を指定します。たとえば、A が行列である場合、movprod(A,k,2)A の列にまたがって動作し、各行の k 個の要素の移動積を計算します。

M = movprod(___,nanflag) は、ANaN 値を含めるか省略するかを指定します。たとえば、movprod(A,k,"omitnan") は各積の計算時に NaN 値を無視します。既定では、movprodNaN 値を含めます。

M = movprod(___,Name,Value) は、名前と値のペアの引数を 1 つ以上使用して移動積に追加のパラメーターを指定します。たとえば、x が時間値のベクトルである場合、movprod(A,k,"SamplePoints",x)x の時間を基準とする移動積を計算します。

すべて折りたたむ

行ベクトルの 3 点の中心移動積を計算します。端点でウィンドウ内の要素数が 3 より少ない場合、使用可能な要素の積を取得します。

A = [1 2 4 -1 -2 -3 -1 3 2 1];
M = movprod(A,3)
M = 1×10

     2     8    -8     8    -6    -6     9    -6     6     2

行ベクトルの 3 点の末尾移動積を計算します。端点でウィンドウ内の要素数が 3 より少ない場合、使用可能な要素の積を取得します。

A = [1 2 1 -1 -2 -3 -1 3 4 1];
M = movprod(A,[2 0])
M = 1×10

     1     2     2    -2     2    -6    -6     9   -12    12

行列の各行の 3 点の中心移動積を計算します。次元引数は 2 であるため、ウィンドウは A の列を横断する方向にスライドします。ウィンドウは最初の行で始まり、行の終わりまで横方向にスライドし、それから 2 行目に移動して同様に繰り返します。

A = [1 2 1; -1 -2 -3; -1 3 4]
A = 3×3

     1     2     1
    -1    -2    -3
    -1     3     4

M = movprod(A,3,2)
M = 3×3

     2     2     2
     2    -6     6
    -3   -12    12

NaN 値が含まれた行ベクトルを作成します。

A = [4 8 NaN -1 -2 -3 NaN 3 4 5];

NaN 値を除外して、ベクトルの 3 点の中心移動積を計算します。NaN 値が含まれているウィンドウでは、movprodNaN 以外の要素で計算します。

M = movprod(A,3,"omitnan")
M = 1×10

    32    32    -8     2    -6     6    -9    12    60    20

時間ベクトル t に従って、A のデータの 3 時間中心移動積を計算します。

A = [4 8 6 -1 -2 -3];
k = hours(3);
t = datetime(2016,1,1,0,0,0) + hours(0:5)
t = 1×6 datetime
   01-Jan-2016 00:00:00   01-Jan-2016 01:00:00   01-Jan-2016 02:00:00   01-Jan-2016 03:00:00   01-Jan-2016 04:00:00   01-Jan-2016 05:00:00

M = movprod(A,k,"SamplePoints",t)
M = 1×6

    32   192   -48    12    -6     6

行ベクトルの 3 点の中心移動積を計算しますが、使用する要素が 3 点より少ない計算を出力から破棄します。言い換えれば、3 要素をすべて含むウィンドウから計算された積のみを返し、端点での計算を破棄します。

A = [1 2 1 -1 -2 -3 -1 3 4 1];
M = movprod(A,3,"Endpoints","discard")
M = 1×8

     2    -2     2    -6    -6     9   -12    12

魔方陣の列から table を作成します。

A = magic(3);
T = array2table(A)
T=3×3 table
    A1    A2    A3
    __    __    __

    8     1     6 
    3     5     7 
    4     9     2 

movprod を使用して table 変数の移動積を計算します。

M = movprod(T,3)
M=3×3 table
    A1    A2    A3
    __    __    __

    24     5    42
    96    45    84
    12    45    14

指定した変数についてのみ移動積を計算するには、名前と値の引数 DataVariables を指定します。

M2 = movprod(T,3,DataVariables=["A2" "A3"])
M2=3×3 table
    A1    A2    A3
    __    __    __

    8      5    42
    3     45    84
    4     45    14

値を置き換える代わりに table に移動積を追加するには、ReplaceValuesfalse として指定します。

M3 = movprod(T,3,ReplaceValues=false)
M3=3×6 table
    A1    A2    A3    A1_movprod    A2_movprod    A3_movprod
    __    __    __    __________    __________    __________

    8     1     6         24             5            42    
    3     5     7         96            45            84    
    4     9     2         12            45            14    

入力引数

すべて折りたたむ

入力データ。ベクトル、行列、多次元配列、table または timetable として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | table | timetable

ウィンドウの長さ。数値または duration スカラーとして指定します。k が正の整数値スカラーである場合、中心積には現在位置の要素とその周囲の要素が含まれます。

たとえば、movprod(A,3) は局所 3 点における積の配列を計算します。

movprod(A,3) computation. The elements in the sample window are 1, 3, and 2, so the resulting local product is 6.

方向指定ウィンドウの長さ。2 つの要素を含む数値または duration 行ベクトルとして指定します。kbkf が正の整数値スカラーの場合、計算は kb+kf+1 個の要素に対して行われます。この計算には、現在位置にある要素、その前にある kb 個の要素、その後にある kf 個の要素が含まれます。

たとえば、movprod(A,[2 1]) は局所 4 点における積の配列を計算します。

movprod(A,[2 1]) computation. The elements in the sample window are 4, 1, 3, and 2, so the resulting local product is 24.

演算の対象の次元。正の整数のスカラーとして指定します。次元を指定しない場合、既定値はサイズが 1 でない最初の配列次元です。

mn 列の入力行列 A を考えます。

  • movprod(A,k,1) は、A の各列について k 要素の移動積を計算し、mn 列の行列を返します。

    movprod(A,k,1) column-wise operation

  • movprod(A,k,2) は、A の各行について k 要素の移動積を計算し、mn 列の行列を返します。

    movprod(A,k,2) row-wise operation

A が table または timetable の場合、dim を指定することはできません。movprod 関数は、常に table および timetable の変数に沿って演算を行います。 (R2025a 以降)

欠損値の条件。次の値のいずれかとして指定します。

  • "includemissing" または "includenan" — 各積の計算時に ANaN 値を含めます。ウィンドウ内のいずれかの要素が NaN の場合、M の対応する要素は NaN です。"includemissing""includenan" の動作は同じです。

  • "omitmissing" または "omitnan"ANaN 値を無視し、点の数を減らして各積を計算します。ウィンドウ内のすべての要素が NaN の場合、M の対応する要素は 1 です。"omitmissing""omitnan" の動作は同じです。

名前と値の引数

すべて折りたたむ

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: M = movprod(A,k,"Endpoints","fill")

端点付近のウィンドウの処理方法。次のオプションのいずれかとして指定します。

説明
"shrink"入力の端点付近のウィンドウのサイズを縮小し、既存の要素のみを含めます。
"discard"

既存の要素とウィンドウが完全にオーバーラップしない場合、積の値を出力しません。

A が table または timetable の場合、Endpoints"discard" として指定することはできません。

"fill"存在しない要素を NaN に置き換えます。
数値または logical スカラー存在しない要素を指定した数値または論理値に置き換えます。

積を計算するためのサンプル点。ベクトルとして指定します。サンプル点は A のデータの位置を表します。サンプル点は等間隔でサンプリングされている必要はありません。既定では、サンプル点ベクトルは [1 2 3 ... ] です。

移動ウィンドウはサンプル点を基準として定義されます。サンプル点は並べ替えられていなければならず、また一意の要素を含んでいなければなりません。たとえば、t が入力データに対応する時間のベクトルである場合、movprod(rand(1,10),3,"SamplePoints",t) には t(i)-1.5 から t(i)+1.5 までの時間間隔を表すウィンドウがあります。

サンプル点ベクトルのデータ型が datetime または duration である場合、移動ウィンドウの長さの型は duration でなければなりません。

サンプル点の間隔が不均一で、Endpoints を指定する場合、その値は "shrink" でなければなりません。

R2025a 以降

演算の対象とする table または timetable 変数。次の表のオプションのいずれかとして指定します。

  • DataVariables を指定しない場合、movprod はすべての変数について演算を行います。この動作は既定の動作です。

  • DataVariables を指定した場合、movprod は指定された変数のみについて演算を行います。DataVariables で指定されていないその他の変数は、変更されずに出力に渡されます。

インデックス方式指定する値

変数名

  • string スカラーまたは文字ベクトル

  • string 配列または文字ベクトルの cell 配列

  • pattern オブジェクト

  • "A" または 'A'A という名前の変数

  • ["A" "B"] または {'A','B'}A および B という名前の 2 つの変数

  • "Var"+digitsPattern(1)"Var" の後に数字 1 桁が続く名前の変数

変数インデックス

  • table 内の変数の位置を参照するインデックス番号

  • 数値のベクトル

  • logical ベクトル。通常、このベクトルの長さは変数の数と同じですが、末尾の 0 (false) 値は省略できます。

  • 3 — table の 3 番目の変数

  • [2 3] — table の 2 番目と 3 番目の変数

  • [false false true] — 3 番目の変数

関数ハンドル

  • 入力として table 変数を取り、logical スカラーを返す関数ハンドル

  • @isnumeric — 数値を含んでいるすべての変数

変数の型

  • 指定した型の変数を選択する vartype 添字

  • vartype("numeric") — 数値を含んでいるすべての変数

R2025a 以降

値置換インジケーター。A が table または timetable の場合に、次の値のいずれかとして指定します。

  • true または 1 — 出力 table または出力 timetable で、入力 table または入力 timetable の変数を movprod からの出力値を含む変数に置き換えます。

  • false または 0 — 出力 table または出力 timetable に movprod からの出力値を含む変数を追加します。

入力データがベクトル、行列、または多次元配列の場合、ReplaceValues はサポートされません。

拡張機能

すべて展開する

バージョン履歴

R2017a で導入

すべて展開する

参考

関数