movprod
構文
説明
M = movprod(
は局所 A
,k
)k
点における積の配列を返します。各積は、長さ k
のスライディング ウィンドウにわたる A
の隣接要素から計算されます。M
のサイズは A
と同じです。
k
が奇数である場合、ウィンドウは現在位置にある要素を中心にして配置されます。k
が偶数である場合、ウィンドウは現在の要素および直前の要素を中心にして配置されます。ウィンドウを埋めるのに十分な数の要素がない場合、ウィンドウ サイズは自動的に端点で打ち切られます。ウィンドウが打ち切られた場合、積はウィンドウを埋めている要素のみから取得されます。
A
がベクトルである場合、movprod
はベクトルA
の長さに沿って演算します。A
が多次元配列の場合、movprod
は、サイズが 1 に等しくないA
の最初の次元に沿って演算します。
M = movprod(___,
は、前述の任意の構文について、演算の対象とする dim
)A
の次元を指定します。たとえば、A
が行列である場合、movprod(A,k,2)
は A
の列にまたがって動作し、各行の k
個の要素の移動積を計算します。
M = movprod(___,
は、nanflag
)A
の NaN
値を含めるか省略するかを指定します。たとえば、movprod(A,k,"omitnan")
は各積の計算時に NaN
値を無視します。既定では、movprod
は NaN
値を含めます。
M = movprod(___,
は、名前と値のペアの引数を 1 つ以上使用して移動積に追加のパラメーターを指定します。たとえば、Name,Value
)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
値が含まれているウィンドウでは、movprod
は NaN
以外の要素で計算します。
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 = 1x6 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
入力引数
A
— 入力配列
ベクトル | 行列 | 多次元配列
入力配列。ベクトル、行列または多次元配列として指定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
k
— ウィンドウの長さ
数値または duration スカラー
ウィンドウの長さ。数値または duration スカラーとして指定します。k
が正の整数値スカラーである場合、中心積には現在位置の要素とその周囲の要素が含まれます。
たとえば、movprod(A,3)
は局所 3 点における積の配列を計算します。
[kb kf]
— 方向指定ウィンドウの長さ
2 つの要素を含む数値または duration 行ベクトル
方向指定ウィンドウの長さ。2 つの要素を含む数値または duration 行ベクトルとして指定します。kb
と kf
が正の整数値スカラーの場合、計算は kb+kf+1
個の要素に対して行われます。この計算には、現在位置にある要素、その前にある kb
個の要素、その後にある kf
個の要素が含まれます。
たとえば、movprod(A,[2 1])
は局所 4 点における積の配列を計算します。
dim
— 演算の対象の次元
正の整数スカラー
演算の対象の次元。正の整数のスカラーとして指定します。次元を指定しない場合、既定値はサイズが 1 より大きい最初の配列次元です。
m
行 n
列の入力行列 A
を考えます。
movprod(A,k,1)
は、A
の各列についてk
要素の移動積を計算し、m
行n
列の行列を返します。movprod(A,k,2)
は、A
の各行についてk
要素の移動積を計算し、m
行n
列の行列を返します。
nanflag
— 欠損値の条件
"includemissing"
(既定値) | "includenan"
| "omitmissing"
| "omitnan"
欠損値の条件。次の値のいずれかとして指定します。
"includemissing"
または"includenan"
— 各積の計算時にA
のNaN
値を含めます。ウィンドウ内のいずれかの要素がNaN
の場合、M
の対応する要素はNaN
です。"includemissing"
と"includenan"
の動作は同じです。"omitmissing"
または"omitnan"
—A
のNaN
値を無視し、点の数を減らして各積を計算します。ウィンドウ内のすべての要素がNaN
の場合、M
の対応する要素は 1 です。"omitmissing"
と"omitnan"
の動作は同じです。
名前と値の引数
引数のオプションのペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name
を引用符で囲みます。
例: M = movprod(A,k,"Endpoints","fill")
Endpoints
— 端点付近のウィンドウの処理方法
"shrink"
(既定値) | "discard"
| "fill"
| 数値または logical スカラー
端点付近のウィンドウの処理方法。次のオプションのいずれかとして指定します。
値 | 説明 |
---|---|
"shrink" | 入力の端点付近のウィンドウのサイズを縮小し、既存の要素のみを含めます。 |
"discard" | 既存の要素とウィンドウが完全にオーバーラップしない場合、積の値を出力しません。 |
"fill" | 存在しない要素を NaN に置き換えます。 |
数値または logical スカラー | 存在しない要素を指定した数値または論理値に置き換えます。 |
SamplePoints
— 積を計算するためのサンプル点
ベクトル
積を計算するためのサンプル点。ベクトルとして指定します。サンプル点は 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"
でなければなりません。
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
名前と値の引数
SamplePoints
はサポートされていません。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
分散配列
Parallel Computing Toolbox™ を使用して、クラスターの結合メモリ上で大きなアレイを分割します。
この関数は分散配列を完全にサポートしています。詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2017a で導入R2023a: 欠損値の条件の指定
"includemissing"
オプションまたは "omitmissing"
オプションを使用して、各積の計算時に入力配列の欠損値を含めるか省略します。これらのオプションの動作はそれぞれ、"includenan"
オプションおよび "omitnan"
オプションと同じです。
R2023a: サンプル点をもつ行列に対する計算時のパフォーマンスが向上
関数 movprod
で、サンプル点がある場合に行列に対して計算する際のパフォーマンスが向上しています。
たとえば、以下のコードでは、対応するサンプル点をもつ 300 行 300 列の行列の移動積を計算しています。以前のリリースと比較して、このコードは約 2.8 倍速くなっています。
function timingMovprod A = randn(300); t = sort(rand(300,1)); tic for k = 1:2000 movprod(A,0.1,"SamplePoints",t); end toc end
おおよその実行時間は以下のとおりです。
R2022b: 0.92 秒
R2023a: 0.33
このコードの時間測定では、Windows® 10、Intel® Xeon® CPU E5-1650 v4 (3.60 GHz) を使用するテスト システムで、関数 timingMovprod
を呼び出しました。
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)