我正在使用ndimage进行插值,如下所示:
ndimage.map_coordinates(input_data, coords, output, 2, prefilter=False)
现在,问题是我没有对整个输入数据进行有效测量。所以,我有一个蒙版数组,告诉我哪些数据点是有效的。因此,在进行插值时,我只想使用有效的像素,并相应地调整权重(以确保权重总和为1)。
但是,我发现没有简单的方法可以做到这一点。我想知道是否有人知道这样做的好方法,或者可以指向一些我可以使用的库或代码。我来自C ++背景,所以仍然找到我的方式围绕python。
答案 0 :(得分:1)
听起来您需要专注于数据插值,然后从所需坐标中提取值。对于1D splrep和2D bisplrep,您需要检查插值函数(A good overview)。这两个函数都可以加权,并对插入的样条函数提供微调控制。
使用所需权重过滤数据后,您可以使用。
确定指定坐标处的值ndimage.map_coordinates(input_data, coords, output, prefilter=True)
请注意,不需要prefilter
关键字参数,因为这是默认值
答案 1 :(得分:0)
您可以使用scipy.interpolate.griddata
从任意已知数据点获取插值。这个例子
import numpy as np
from scipy.interpolate import griddata
# data array
a = np.arange(9).reshape((3,3)).astype(float)
a[1, 1] = np.nan
print(a)
a = a.flatten()
# coordinate arrays
ii, jj = np.indices((3,3))
ij = np.stack((ii.flatten(), jj.flatten()), axis=1)
# filter out unknowns
mask = ~np.isnan(a)
a = a[mask]
ij = ij[mask]
# interpolate for the missing a[1, 1] element
res = griddata(ij, a, (1, 1), method='cubic')
print(res)
产生
[[ 0. 1. 2.]
[ 3. nan 5.]
[ 6. 7. 8.]]
4.000000157826586