「fillmissi​ng2」関数は、なぜ​行列を転置すると同じ​補完結果にならないの​ですか?

3 views (last 30 days)
MathWorks Support Team
MathWorks Support Team on 20 Oct 2025 at 0:00
Answered: MathWorks Support Team on 20 Oct 2025 at 23:28
「fillmissing2」関数の挙動について質問があります。
2次元の行列に対して欠損値(NaN)の補完を行った場合と、その行列を一度転置して補完し、再び転置して元に戻した場合で、補完結果が同じになると思っていました。しかし、実際には結果が異なります。なぜこのような違いが生じるのでしょうか。

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 20 Oct 2025 at 0:00
この違いは、「fillmissing2」関数の「nearest(最近傍)」補完方法の仕様に由来します。
特に、複数の隣接要素が同じ距離にある場合、どの値を補完に使うかを決める際に「線形インデックス(Linear Index)」という考え方が使われます。線形インデックスとは、MATLABの行列要素に割り当てられる一意の番号で、左上から下方向に列ごとに番号が振られる「列優先」の順序です。
たとえば、次のような3×3行列Aを例に説明します。
A =
1 2 3
4 NaN 6
7 8 9
このとき、各要素の線形インデックスは以下のようになります。
  • A(1,1): 1
  • A(2,1): 2
  • A(3,1): 3
  • A(1,2): 4
  • A(2,2): 5
  • A(3,2): 6
  • A(1,3): 7
  • A(2,3): 8
  • A(3,3): 9
中央のNaN(A(2,2))を補完する場合、上下左右の隣接要素は
  • A(2,1): 4(インデックス2)
  • A(1,2): 2(インデックス4)
  • A(3,2): 8(インデックス6)
  • A(2,3): 6(インデックス8)
となります。この中で、最も線形インデックスが大きいA(2,3)(インデックス8、値6)が補完値として選ばれます。
その結果は以下の通りです。
>> fillmissing2(A, 'nearest')
ans =
1 2 3
4 6 6
7 8 9
一方、行列を転置すると要素の配置が変わり、線形インデックスの割り当ても変わります。そのため、同じ位置の欠損値に対して選ばれる隣接要素が異なり、補完結果が変わります。
つまり、「fillmissing2」関数は、行列とその転置行列で必ずしも同じ補完結果を返すとは限りません。
この仕様上、転置操作を用いた場合に同一の補完結果を得ることはできませんので、補完処理の際にはご注意ください。

More Answers (0)

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Tags

No tags entered yet.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!