微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决用轴 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 举报,一经查实,本站将立刻删除。