爲了簡便起見,這顯示瞭如何在與正上方和正下方的元件中值填補。剩餘的2的情況下(或6,這取決於如何定義「相鄰」)是類似的。
與矩陣A
開始,移動「向上」沿垂直軸元素可以
up = np.roll(A, 1, axis=0)
up[0, :] = np.nan
>>> up
array([[ nan, nan, nan, ..., nan, nan, nan],
[ 50., nan, 52., ..., nan, 128., nan],
[ nan, 52., nan, ..., 128., nan, 130.],
...,
[ 126., nan, 128., ..., nan, 204., nan],
[ nan, 128., nan, ..., 204., nan, 206.],
[ 128., nan, 130., ..., nan, 206., nan]])
同樣可以發現,
down = np.roll(A, -1, axis=0)
down[-1, :] = np.nan
>>> down
array([[ nan, 52., nan, ..., 128., nan, 130.],
[ 52., nan, 54., ..., nan, 130., nan],
[ nan, 54., nan, ..., 130., nan, 132.],
...,
[ 128., nan, 130., ..., nan, 206., nan],
[ nan, 130., nan, ..., 206., nan, 208.],
[ nan, nan, nan, ..., nan, nan, nan]])
由於這是numpy的,你可以創建一個3D使用這些2(或更多)陣列輕鬆排列
np.array([up, down])
有了這個陣列Y,我們可以採取np.nanmedian
沿0軸(這僅僅是每個down
和up
):
np.nanmedian(np.array([up, down]), axis=0)
爲了填補缺失的值在A
,使用
A[np.isnan(A)] = np.nanmedian(np.array([up, down]), axis=0)[np.isnan(A)]
P.S.由於所有的鄰居可以把所有的組合軸= 0之間,-1 1,0,1個轉移(0,0移是元件本身,這將不被使用無論如何由於該isnan
)中找到,則可以用雙循環自動創建所有這些二維數組。
也許你可以使用屏蔽數組? http://docs.scipy.org/doc/numpy/reference/maskedarray.generic.html – maazza