python - 用轴 0 上的插值替换 3D 矩阵中的 NaN
问题描述
我有一个 3D 矩阵,其中一些切片(轴 1 和 2)有时有 NaN,有时用 NaN 填充,有时用数字填充。我想通过在轴 0 上应用“最近邻”插值来插值 NaN。这样,如果例如 arr[0,0,0] 是 NaN,我的算法将搜索 arr[1:-1,0 ,0] 最接近的值并对其进行插值以将 arr[0,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, 0, arr, interpolation)
但是我有一个错误,因为如果我有一个只有 NaN 的向量(例如 arr[2,0,:]),则该函数不起作用。如果我的向量中只有孤立的 NaN,它就可以工作。我参加了几个论坛问题(通过在 Matlab中插值3D 矩阵层获取插值 2D 矩阵,在 Python中插值 3D 数组,使用 numpy 和/或 scipy 插值 3D 体积),但没有一个被接受的答案适用于我的数组。
有更好的方法吗?最后,我希望我的数组“结果”充满值。
解决方案
推荐阅读
- java - 如何触发@LastModifiedDate
- css - 网格将项目放在列中,而不是行中
- c# - 如何在 C# 中将字符串中的所有内容捕获到单独的组中?
- jquery - JQuery 按类从特定子 DIV 中读取文本
- javascript - 如何使用正则表达式在特定字符之前选择除最后两个之外的所有多个空格?
- angularjs - 如何将`required`属性添加到angularjs指令
- ios - XCUITest 在页面上找不到元素
- javascript - 如何根据下拉选择提交显示的div
- autohotkey - 在 AutoHotKey 中使用 Right Alt 和 Right Ctrl 复制和粘贴
- python - 有什么方法可以远程运行 Tensorflow 模型?