Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带遮罩阵列的ndimage map_坐标_Python_Scipy_Ndimage - Fatal编程技术网

Python 带遮罩阵列的ndimage map_坐标

Python 带遮罩阵列的ndimage map_坐标,python,scipy,ndimage,Python,Scipy,Ndimage,我使用ndimage进行插值,如下所示: ndimage.map_coordinates(input_data, coords, output, 2, prefilter=False) 现在的问题是,我没有对我的整个输入数据进行有效的测量。所以,我有一个屏蔽数组,它告诉我哪些数据点是有效的。因此,在进行插值时,我只希望使用有效的像素,并相应地调整权重(以确保权重总和为1) 然而,我发现要做到这一点并不容易。我想知道是否有人知道这样做的好方法,或者可以告诉我一些我可以使用的库或代码。我来自C++

我使用ndimage进行插值,如下所示:

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。