问题描述
我有一个 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 Matlab、Interpolate a 3D array in Python、interpolate 3D volume with numpy and or scipy),但没有一个接受的答案适用于我的阵列。
有没有更好的方法来做到这一点?最后,我希望我的数组“结果”充满值。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)