movsum
移動合計値
構文
説明
M = movsum(
は局所 A
,k
)k
点における合計値の配列を返します。各合計値は、長さ k
のスライディング ウィンドウにわたる A
の隣接要素から計算されます。k
が奇数である場合、ウィンドウは現在位置にある要素を中心にして配置されます。k
が偶数である場合、ウィンドウは現在の要素および直前の要素を中心にして配置されます。ウィンドウを埋めるのに十分な数の要素がない場合、ウィンドウ サイズは自動的に端点で打ち切られます。ウィンドウが打ち切られた場合、合計値はウィンドウを埋めている要素のみから取得されます。M
は A
と同じサイズです。
A
がベクトルである場合、movsum
はベクトルA
の長さに沿って演算します。A
が多次元配列の場合、movsum
は、サイズが 1 に等しくないA
の最初の次元に沿って演算します。
M = movsum(___,
は、前述の任意の構文について、演算の対象とする dim
)A
の次元を指定します。たとえば、A
が行列である場合、movsum(A,k,2)
は A
の列に沿って動作し、各行の k
個の要素の移動合計値を計算します。
M = movsum(___,
は、nanflag
)A
の NaN
値を含めるか省略するかを指定します。たとえば、movsum(A,k,"omitnan")
は各合計値の計算時にすべての NaN
値を無視します。既定では、movsum
は NaN
値を含めます。
M = movsum(___,
は、名前と値の引数を 1 つ以上使用して合計値に追加のパラメーターを指定します。たとえば、Name,Value
)x
が時間ベクトルである場合、movsum(A,k,"SamplePoints",x)
は x
を基準として A
の移動合計値を計算します。
例
ベクトルの中心移動合計値
行ベクトルの 3 点の中心移動合計値を計算します。端点でウィンドウ内の要素数が 3 より少ない場合、使用可能な要素の合計値を取得します。
A = [4 8 6 -1 -2 -3 -1 3 4 5]; M = movsum(A,3)
M = 1×10
12 18 13 3 -6 -6 -1 6 12 9
ベクトルの末尾移動合計値
行ベクトルの 3 点の末尾移動合計値を計算します。端点でウィンドウ内の要素数が 3 より少ない場合、movsum
は使用可能な要素の合計値を取得します。
A = [4 8 6 -1 -2 -3 -1 3 4 5]; M = movsum(A,[2 0])
M = 1×10
4 12 18 13 3 -6 -6 -1 6 12
行列の移動合計値
行列の各行に対して 3 点の中心移動合計値を計算します。ウィンドウは最初の行で始まり、行の終わりまで横方向にスライドし、それから 2 行目に移動して同様に繰り返します。次元引数は 2 であるため、ウィンドウは A
の列を横断する方向にスライドします。
A = [4 8 6; -1 -2 -3; -1 3 4]
A = 3×3
4 8 6
-1 -2 -3
-1 3 4
M = movsum(A,3,2)
M = 3×3
12 18 14
-3 -6 -5
2 6 7
欠損値を除外した移動合計値
NaN
値が含まれた行ベクトルを作成します。
A = [4 8 NaN -1 -2 -3 NaN 3 4 5];
NaN
値を除外して、ベクトルの 3 点の中心移動合計値を計算します。NaN
値が含まれているウィンドウでは、movsum
は NaN
以外の要素で計算します。
M = movsum(A,3,"omitnan")
M = 1×10
12 12 7 -3 -6 -5 0 7 12 9
移動合計値のサンプル点
時間ベクトル t
に従って、A
のデータの 3 時間中心移動合計値を計算します。
A = [4 8 6 -1 -2 -3]; k = hours(3); t = datetime(16,1,1,0,0,0) + hours(0:5)
t = 1x6 datetime
01-Jan-0016 00:00:00 01-Jan-0016 01:00:00 01-Jan-0016 02:00:00 01-Jan-0016 03:00:00 01-Jan-0016 04:00:00 01-Jan-0016 05:00:00
M = movsum(A,k,"SamplePoints",t)
M = 1×6
12 18 13 3 -6 -5
フルウィンドウの合計値のみを返す
行ベクトルの 3 点の中心移動合計値を計算しますが、使用する要素が 3 点より少ない計算を出力から破棄します。言い換えれば、3 要素をすべて含むウィンドウから計算された合計値のみを返し、端点での計算を破棄します。
A = [4 8 6 -1 -2 -3 -1 3 4 5]; M = movsum(A,3,"Endpoints","discard")
M = 1×8
18 13 3 -6 -6 -1 6 12
入力引数
A
— 入力配列
ベクトル | 行列 | 多次元配列
入力配列。ベクトル、行列または多次元配列として指定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
k
— ウィンドウの長さ
数値または duration スカラー
ウィンドウの長さ。数値または duration スカラーとして指定します。k
が正の整数値スカラーである場合、中心合計値には現在位置の要素とその周囲の要素が含まれます。
たとえば、movsum(A,3)
は局所 3 点における合計値の配列を計算します。
[kb kf]
— 方向指定ウィンドウの長さ
2 つの要素を含む数値または duration 行ベクトル
方向指定ウィンドウの長さ。2 つの要素を含む数値または duration 行ベクトルとして指定します。kb
と kf
が正の整数値スカラーの場合、計算は kb+kf+1
個の要素に対して行われます。この計算には、現在位置にある要素、その前にある kb
個の要素、その後にある kf
個の要素が含まれます。
たとえば、movsum(A,[2 1])
は局所 4 点における合計値の配列を計算します。
dim
— 演算の対象の次元
正の整数スカラー
演算の対象の次元。正の整数のスカラーとして指定します。次元を指定しない場合、既定値はサイズが 1 より大きい最初の配列次元です。
次元 dim
は movsum
が沿って動作する次元、つまり指定されたウィンドウがスライドする方向を示します。
m
行 n
列の入力行列 A
を考えます。
movsum(A,k,1)
は、A
の各列についてk
要素の移動合計値を計算し、m
行n
列の行列を返します。movsum(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
の対応する要素は 0 です。"omitmissing"
と"omitnan"
の動作は同じです。
名前と値の引数
引数のオプションのペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name
を引用符で囲みます。
例: M = movsum(A,k,"Endpoints","fill")
Endpoints
— 端点付近のウィンドウの処理方法
"shrink"
(既定値) | "discard"
| "fill"
| 数値または logical スカラー
端点付近のウィンドウの処理方法。次のオプションのいずれかとして指定します。
値 | 説明 |
---|---|
"shrink" | 入力の端点付近のウィンドウのサイズを縮小し、既存の要素のみを含めます。 |
"discard" | 既存な要素とウィンドウが完全にオーバーラップしない場合、合計値を出力しません。 |
"fill" | 存在しない要素を NaN に置き換えます。 |
数値または logical スカラー | 存在しない要素を指定した数値または論理値に置き換えます。 |
SamplePoints
— 合計値を計算するためのサンプル点
ベクトル
合計値を計算するためのサンプル点。ベクトルとして指定します。サンプル点は A
のデータの位置を表します。サンプル点は等間隔でサンプリングされている必要はありません。既定では、サンプル点ベクトルは [1 2 3 ... ]
です。
移動ウィンドウはサンプル点を基準として定義されます。サンプル点は並べ替えられていなければならず、また一意の要素を含んでいなければなりません。たとえば、t
が入力データに対応する時間のベクトルである場合、movsum(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++ コードを生成します。
この関数は 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)を参照してください。
バージョン履歴
R2016a で導入R2023a: 欠損値の条件の指定
"includemissing"
オプションまたは "omitmissing"
オプションを使用して、各合計値の計算時に入力配列の欠損値を含めるか省略します。これらのオプションの動作はそれぞれ、"includenan"
オプションおよび "omitnan"
オプションと同じです。
R2023a: サンプル点をもつ行列に対する計算時のパフォーマンスが向上
関数 movsum
で、サンプル点がある場合に行列に対して計算する際のパフォーマンスが向上しています。
たとえば、以下のコードでは、対応するサンプル点をもつ 300 行 300 列の行列の移動合計値を計算しています。このコードは、以前のリリースよりパフォーマンスが約 3 倍高速化しました。
function timingMovsum A = randn(300); t = sort(rand(300,1)); tic for k = 1:2000 movsum(A,0.1,"SamplePoints",t); end toc end
おおよその実行時間は以下のとおりです。
R2022b: 1.04 秒
R2023a: 0.34
このコードの時間測定では、Windows® 10、Intel® Xeon® CPU E5-1650 v4 (3.60 GHz) を使用するテスト システムで、関数 timingMovsum
を呼び出しました。
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)