用轴 0 上的插值替换 3D 矩阵中的 NaN

问题描述

我有一个 3D 矩阵,其中一些切片(轴 1 和 2)有时有 NaN,有时用 NaN 填充,有时用数字填充。 我想通过在轴 0 上应用“最近邻”插值来插入 NaN。这样,如果 arr[0,0] 是 NaN,我的算法将搜索 arr[1:-1,0] 最接近的值并对其进行插值以将 arr[0,0] 替换为一个数字。

到目前为止,我打算这样做:

import numpy as np
from scipy import interpolate

arr = np.empty((4,4,5))
arr[:] = np.nan
arr[0] = np.random.random()
arr[3] = np.random.random()
arr[0,0:2,0:2] = np.nan

def gap_filling(vect,interpolation):

    time = np.arange(0,np.shape(vect)[0])
    mask = np.isfinite(vect)
    f = interpolate.interp1d(time[mask],vect[mask],kind=interpolation,bounds_error=False)

    vect_filled = np.copy(vect)
    vect_filled[np.isnan(vect)] = f(time[np.isnan(vect)])

    return vect_filled

result = np.apply_along_axis(gap_filling,arr,interpolation)

但是我有一个错误,因为如果我有一个只有 NaN 的向量(例如 arr[2,:]),该函数将不起作用。如果我的向量中只有孤立的 NaN,它就可以工作。 我参加了几个论坛问题(Get interpolated 2D matrix by interpolating layers of 3D matrix in MatlabInterpolate a 3D array in Pythoninterpolate 3D volume with numpy and or scipy),但没有一个接受的答案适用于我的阵列。

有没有更好的方法来做到这一点?最后,我希望我的数组“结果”充满值。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)