Python 带遮罩阵列的ndimage map_坐标
我使用ndimage进行插值,如下所示:Python 带遮罩阵列的ndimage map_坐标,python,scipy,ndimage,Python,Scipy,Ndimage,我使用ndimage进行插值,如下所示: ndimage.map_coordinates(input_data, coords, output, 2, prefilter=False) 现在的问题是,我没有对我的整个输入数据进行有效的测量。所以,我有一个屏蔽数组,它告诉我哪些数据点是有效的。因此,在进行插值时,我只希望使用有效的像素,并相应地调整权重(以确保权重总和为1) 然而,我发现要做到这一点并不容易。我想知道是否有人知道这样做的好方法,或者可以告诉我一些我可以使用的库或代码。我来自C++
ndimage.map_coordinates(input_data, coords, output, 2, prefilter=False)
现在的问题是,我没有对我的整个输入数据进行有效的测量。所以,我有一个屏蔽数组,它告诉我哪些数据点是有效的。因此,在进行插值时,我只希望使用有效的像素,并相应地调整权重(以确保权重总和为1)
然而,我发现要做到这一点并不容易。我想知道是否有人知道这样做的好方法,或者可以告诉我一些我可以使用的库或代码。我来自C++背景,所以仍然在Python上找到我的方法。 听起来您需要关注数据的插值,然后从所需坐标中提取值。对于1D和2D,您需要签出插值函数()。这两个函数都可以加权,并提供对插值样条曲线函数的微调控制 使用所需权重过滤数据后,可以使用确定指定坐标处的值
ndimage.map_coordinates(input_data, coords, output, prefilter=True)
注意:不需要
prefilter
关键字参数,因为这是默认值您可以使用scipy.interpolate.griddata
从任意已知数据点获取插值。这个例子
将numpy导入为np
从scipy.interpolate导入网格数据
#数据阵列
a=np.arange(9)。重塑((3,3))。a型(浮动)
a[1,1]=np.nan
印刷品(a)
a=a.展平()
#坐标阵列
ii,jj=np.指数((3,3))
ij=np.stack((ii.flatte(),jj.flatte()),轴=1)
#过滤掉未知数
掩码=~np.isnan(a)
a=a[面具]
ij=ij[遮罩]
#为缺少的[1,1]元素进行插值
res=griddata(ij,a,(1,1),method='cubic')
打印(res)
产生
[[ 0. 1. 2.]
[ 3. nan 5.]
[ 6. 7. 8.]]
4.000000157826586
问题是插值数据无法处理屏蔽阵列。基本上,我不希望它使用掩码中没有的值。然而,我不知道如何做到这一点。我在scipy上看到了一些关于这个问题的罚单,但我认为这个问题还没有解决。排除数据的一个好方法是将该数据的权重设置为0。否则,您可以将不需要的值设置为
nan
,然后可能执行类似于stackoverflow.com/questions/6518811/interpolate-nan-values-in-A-numpy-arrary的操作。我不确定这是否提供了对权重的请求控制,但它们的总和必须为1。