この違いは、「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」関数は、行列とその転置行列で必ずしも同じ補完結果を返すとは限りません。
この仕様上、転置操作を用いた場合に同一の補完結果を得ることはできませんので、補完処理の際にはご注意ください。