ndimage map_coordinates with masked arrays

时间:2014-06-18 18:02:45

标签: python scipy ndimage

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

ndimage.map_coordinates(input_data, coords, output, 2, prefilter=False)

现在,问题是我没有对整个输入数据进行有效测量。所以,我有一个蒙版数组,告诉我哪些数据点是有效的。因此,在进行插值时,我只想使用有效的像素,并相应地调整权重(以确保权重总和为1)。

但是,我发现没有简单的方法可以做到这一点。我想知道是否有人知道这样做的好方法,或者可以指向一些我可以使用的库或代码。我来自C ++背景,所以仍然找到我的方式围绕python。

2 个答案:

答案 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