movmedian
移動中央値
構文
説明
M = movmedian(
は局所 A
,k
)k
点における中央値を返します。各中央値は、長さ k
のスライディング ウィンドウにわたる A
の隣接要素から計算されます。k
が奇数である場合、ウィンドウは現在位置にある要素を中心にして配置されます。k
が偶数である場合、ウィンドウは現在の要素および直前の要素を中心にして配置されます。ウィンドウを埋めるのに十分な数の要素がない場合、ウィンドウ サイズは自動的に端点で打ち切られます。ウィンドウが打ち切られた場合、中央値はウィンドウを埋めている要素のみから取得されます。M
は A
と同じサイズです。
A
がベクトルである場合、movmedian
はベクトルA
の長さに沿って演算します。A
が多次元配列の場合、movmedian
は、サイズが 1 に等しくないA
の最初の次元に沿って演算します。A
が table または timetable の場合、movmedian
はA
の変数に沿って演算します。 (R2025a 以降)
M = movmedian(___,
は、前述の任意の構文について、演算の対象とする dim
)A
の次元を指定します。たとえば、A
が行列である場合、movmedian(A,k,2)
は A
の列に沿って動作し、各行の k
個の要素の移動中央値を計算します。
M = movmedian(___,
は、nanflag
)A
の NaN
値を含めるか省略するかを指定します。たとえば、movmedian(A,k,"omitnan")
は各中央値の計算時に NaN
値を無視します。既定では、movmedian
は NaN
値を含めます。
M = movmedian(___,
は、名前と値のペアの引数を 1 つ以上使用して移動中央値に追加のパラメーターを指定します。たとえば、Name,Value
)x
が時間値のベクトルである場合、movmedian(A,k,"SamplePoints",x)
は x
の時間を基準とする移動中央値を計算します。
例
行ベクトルの 3 点の中心移動中央値を計算します。端点でウィンドウ内の要素数が 3 より少ない場合、使用可能な要素の平均値を取得します。
A = [4 8 6 -1 -2 -3 -1 3 4 5]; M = movmedian(A,3)
M = 1×10
6.0000 6.0000 6.0000 -1.0000 -2.0000 -2.0000 -1.0000 3.0000 4.0000 4.5000
行ベクトルの 3 点の末尾移動中央値を計算します。端点でウィンドウ内の要素数が 3 より少ない場合、使用可能な要素の平均値を取得します。
A = [4 8 6 -1 -2 -3 -1 3 4 5]; M = movmedian(A,[2 0])
M = 1×10
4 6 6 6 -1 -2 -2 -1 3 4
行列の各行に対して 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 = movmedian(A,3,2)
M = 3×3
6.0000 6.0000 7.0000
-1.5000 -2.0000 -2.5000
1.0000 3.0000 3.5000
NaN
値が含まれた行ベクトルを作成します。
A = [4 8 NaN -1 -2 -3 NaN 3 4 5];
NaN
値を除外して、ベクトルの 3 点の中心移動中央値を計算します。NaN
値が含まれているウィンドウでは、movmedian
は NaN
以外の要素で計算します。
M = movmedian(A,3,"omitnan")
M = 1×10
6.0000 6.0000 3.5000 -1.5000 -2.0000 -2.5000 0 3.5000 4.0000 4.5000
時間ベクトル 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 = movmedian(A,k,"SamplePoints",t)
M = 1×6
6.0000 6.0000 6.0000 -1.0000 -2.0000 -2.5000
行ベクトルの 3 点の中心移動中央値を計算しますが、使用する要素が 3 点より少ない計算を出力から破棄します。言い換えれば、3 要素をすべて含むウィンドウから計算された中央値のみを返し、端点での計算を破棄します。
A = [4 8 6 -1 -2 -3 -1 3 4 5]; M = movmedian(A,3,"Endpoints","discard")
M = 1×8
6 6 -1 -2 -2 -1 3 4
魔方陣の列から table を作成します。
A = magic(3); T = array2table(A)
T=3×3 table
A1 A2 A3
__ __ __
8 1 6
3 5 7
4 9 2
movmedian
を使用して table 変数の移動中央値を計算します。
M = movmedian(T,3)
M=3×3 table
A1 A2 A3
___ __ ___
5.5 3 6.5
4 5 6
3.5 7 4.5
指定した変数についてのみ移動中央値を計算するには、名前と値の引数 DataVariables
を指定します。
M2 = movmedian(T,3,DataVariables=["A2" "A3"])
M2=3×3 table
A1 A2 A3
__ __ ___
8 3 6.5
3 5 6
4 7 4.5
値を置き換える代わりに table に移動中央値を追加するには、ReplaceValues
を false
として指定します。
M3 = movmedian(T,3,ReplaceValues=false)
M3=3×6 table
A1 A2 A3 A1_movmedian A2_movmedian A3_movmedian
__ __ __ ____________ ____________ ____________
8 1 6 5.5 3 6.5
3 5 7 4 5 6
4 9 2 3.5 7 4.5
入力引数
入力データ。ベクトル、行列、多次元配列、table または timetable として指定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| table
| timetable
ウィンドウの長さ。数値または duration スカラーとして指定します。k
が正の整数値スカラーである場合、中心中央値には現在位置の要素とその周囲の要素が含まれます。
たとえば、movmedian(A,3)
は局所 3 点における中央値の配列を計算します。
方向指定ウィンドウの長さ。2 つの要素を含む数値または duration 行ベクトルとして指定します。kb
と kf
が正の整数値スカラーの場合、計算は kb+kf+1
個の要素に対して行われます。この計算には、現在位置にある要素、その前にある kb
個の要素、その後にある kf
個の要素が含まれます。
たとえば、movmedian(A,[2 1])
は局所 4 点における中央値の配列を計算します。
演算の対象の次元。正の整数のスカラーとして指定します。次元を指定しない場合、既定値はサイズが 1 でない最初の配列次元です。
次元 dim
は movmedian
が沿って動作する次元、つまり指定されたウィンドウがスライドする方向を示します。
m
行 n
列の入力行列 A
を考えます。
movmedian(A,k,1)
は、A
の各列についてk
要素の移動中央値を計算し、m
行n
列の行列を返します。movmedian(A,k,2)
は、A
の各行についてk
要素の移動中央値を計算し、m
行n
列の行列を返します。
A
が table または timetable の場合、dim
を指定することはできません。movmedian
関数は、常に table および timetable の変数に沿って演算を行います。 (R2025a 以降)
欠損値の条件。次の値のいずれかとして指定します。
"includemissing"
または"includenan"
— 各中央値の計算時にA
のNaN
値を含めます。ウィンドウ内のいずれかの要素がNaN
の場合、M
の対応する要素はNaN
です。"includemissing"
と"includenan"
の動作は同じです。"omitmissing"
または"omitnan"
—A
のすべてのNaN
値を無視し、点の数を減らして各中央値を計算します。ウィンドウ内のすべての要素がNaN
の場合、M
の対応する要素はNaN
です。"omitmissing"
と"omitnan"
の動作は同じです。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name
を引用符で囲みます。
例: M = movmedian(A,k,"Endpoints","fill")
端点付近のウィンドウの処理方法。次のオプションのいずれかとして指定します。
値 | 説明 |
---|---|
"shrink" | 入力の端点付近のウィンドウのサイズを縮小し、既存の要素のみを含めます。 |
"discard" | ウィンドウが既存の要素と完全にはオーバーラップしない場合、中央値を出力しません。
|
"fill" | 存在しない要素を NaN に置き換えます。 |
数値または logical スカラー | 存在しない要素を指定した数値または論理値に置き換えます。 |
中央値を計算するためのサンプル点。ベクトルとして指定します。サンプル点は A
のデータの位置を表します。サンプル点は等間隔でサンプリングされている必要はありません。既定では、サンプル点ベクトルは [1 2 3 ... ]
です。
移動ウィンドウはサンプル点を基準として定義されます。サンプル点は並べ替えられていなければならず、また一意の要素を含んでいなければなりません。たとえば、t
が入力データに対応する時間のベクトルである場合、movmedian(rand(1,10),3,"SamplePoints",t)
には t(i)-1.5
から t(i)+1.5
までの時間間隔を表すウィンドウがあります。
サンプル点ベクトルのデータ型が datetime
または duration
である場合、移動ウィンドウの長さの型は duration
でなければなりません。
サンプル点の間隔が不均一で、Endpoints
を指定する場合、その値は "shrink"
でなければなりません。
R2025a 以降
演算の対象とする table または timetable 変数。次の表のオプションのいずれかとして指定します。
DataVariables
を指定しない場合、movmedian
はすべての変数について演算を行います。この動作は既定の動作です。DataVariables
を指定した場合、movmedian
は指定された変数のみについて演算を行います。DataVariables
で指定されていないその他の変数は、変更されずに出力に渡されます。
インデックス方式 | 指定する値 | 例 |
---|---|---|
変数名 |
|
|
変数インデックス |
|
|
関数ハンドル |
|
|
変数の型 |
|
|
R2025a 以降
値置換インジケーター。A
が table または timetable の場合に、次の値のいずれかとして指定します。
true
または1
— 出力 table または出力 timetable で、入力 table または入力 timetable の変数をmovmedian
からの出力値を含む変数に置き換えます。false
または0
— 出力 table または出力 timetable にmovmedian
からの出力値を含む変数を追加します。
入力データがベクトル、行列、または多次元配列の場合、ReplaceValues
はサポートされません。
拡張機能
この関数は tall 配列を制限付きでサポートしています。
名前と値の引数
SamplePoints
、DataVariables
、およびReplaceValues
はサポートされません。table および timetable の入力はサポートされていません。
詳細については、tall 配列を参照してください。
使用上の注意および制限:
名前と値の引数
DataVariables
およびReplaceValues
はサポートされません。table および timetable の入力はサポートされていません。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
movmedian
関数は GPU 配列入力をサポートしますが、次の使用上の注意および制限があります。
ウィンドウの最大の長さは
gpuArray
データの場合 31 です。名前と値の引数
SamplePoints
、DataVariables
、およびReplaceValues
はサポートされません。table および timetable の入力はサポートされていません。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
使用上の注意および制限:
名前と値の引数
DataVariables
およびReplaceValues
はサポートされません。table および timetable の入力はサポートされていません。
詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2016a で導入演算対象の数値データを含む table および timetable を入力として指定できます。既定では、movmedian
は table または timetable のすべての変数について演算を行います。ただし、どの変数を演算の対象とするかを指定できます。出力 table または出力 timetable に movmedian
からの出力値を新しい変数として追加することもできます。
"includemissing"
オプションまたは "omitmissing"
オプションを使用して、各中央値の計算時に入力配列の欠損値を含めるか省略します。これらのオプションの動作はそれぞれ、"includenan"
オプションおよび "omitnan"
オプションと同じです。
関数 movmedian
で、サンプル点がある場合に行列に対して計算する際のパフォーマンスが向上しています。
たとえば、以下のコードでは、対応するサンプル点をもつ 300 行 300 列の行列の移動中央値を計算しています。直前のリリースと比較して、このコードは約 1.7 倍速くなっています。
function timingMovmedian A = randn(300); t = sort(rand(300,1)); tic for k = 1:400 movmedian(A,0.1,"SamplePoints",t); end toc end
おおよその実行時間は以下のとおりです。
R2022b: 1.14 秒
R2023a: 0.67
コードは、Windows® 10、Intel® Xeon® CPU E5-1650 v4 (3.60 GHz) のテスト システム上で関数 timingMovmedian
を呼び出して時間測定されました。
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)