gpt4 book ai didi

python - 具有最大插值距离的numpy数组插值

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:11 25 4
gpt4 key购买 nike

我有一个看起来像这样的 numpy 数组。 Raw data

我想在数据点之间进行插值以填充数据中的一些较小的空洞。假设在这个例子中我想插值最多 2 个像素。然后我会期待类似的东西。 Expected result

到目前为止,我已经尝试了几种插值方法,例如:

from scipy.interpolate import LinearNDInterpolator
valid_mask = ~np.isnan(raw)
coords = np.array(np.nonzero(valid_mask)).T
values = raw[valid_mask]
it = LinearNDInterpolator(coords, values)
interpolated = it(list(np.ndindex(raw.shape))).reshape(raw.shape)

导致结果。 Interpolated

这种方法不会保留数据中的聚类,我可以通过预先聚类然后添加结果来轻松克服这一点。但更重要的是,它在具有形式的集群中进行远距离插值。

谁能给我指出一种使用某种距离阈值的插值方法?

为了测试,我包含了用于解释我的问题的示例数据:

raw = np.array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
[ 0., 1., 0., 0., 3., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 5., 4., 4., 4., 4., 4., 5.],
[ 0., 5., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 1., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0.]])

raw[raw==0]=np.nan

最佳答案

您可以执行 binary_closing(例如,来自 skimage.morphologyscipy.ndimage.morphology)来屏蔽您的最终输出。

from skimage import morphology
close_mask = morphology.binary_closing(valid_mask, morphology.square(3))
interpolated[:] = np.where(close_mask, interpolated, np.nan)

结果:

array([[    nan,     nan,     nan,     nan,     nan,     nan,     nan,     nan],
[ nan, 1. , 1.6667, 2.3333, 3. , nan, nan, nan],
[ nan, nan, nan, nan, nan, nan, nan, nan],
[ nan, nan, nan, nan, nan, nan, nan, nan],
[ nan, nan, nan, nan, nan, nan, nan, nan],
[ nan, 5. , 4. , 4. , 4. , 4. , 4. , nan],
[ nan, 5. , 3. , nan, nan, nan, nan, nan],
[ nan, nan, 2. , nan, nan, nan, nan, nan],
[ nan, nan, 1. , nan, nan, nan, nan, nan],
[ nan, nan, nan, nan, nan, nan, nan, nan]])

更改内核大小和形状以获得您想要的;有几个可用,或者您可以自己制作。显然这不是非常有效,因为它进行了整个插值但只保留了你想要的部分。我不确定如何首先限制计算的完成位置。

此外,它似乎杀死了边界(见第 5 行)。我想这可以解决。

关于python - 具有最大插值距离的numpy数组插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32272004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com