Scipy Interp1d内插屏蔽数组

时间:2020-03-19 20:51:16

标签: python arrays numpy scipy

我有遮罩的数组(玩具示例)-[1 2 3 4 -- 6]

points = [1, 2, 3, 4, 0, 6]
mask = [0, 0, 0, 0, 1, 0]
points = ma.array(points, mask=mask)

我想将其从6个维度内插到任意数字,例如6。 我的插值标准是它将忽略掩码值,并跳过该索引。

不良行为,例如与lin = np.linspace(0, 1, 6)

f = interp1d(lin, points, axis=0, kind='cubic')
f(lin) # [1  2 3 4 -8.8817842e-16 6]

相反,我希望它的行为像这样:

compressed_lin = [0, 0.2, 0.4, 0.6, 1]
compressed_points = np.array([1,2,3,4,6])
f = interp1d(compressed_lin, compressed_points, axis=0, kind='cubic')
f(lin) # [1 2 3 4 5 6]

实际数据:

我的数据的格式为[100, 100, 2],因此它不像隐藏大小为100的linspace的掩码值一样简单。

关于掩码数组的注释:

我已经知道有一种方法可以对蒙版数组(https://modelhelptokyo.wordpress.com/2017/10/25/how-to-interpolate-missing-values-2d-python/Scipy interpolation with masked data?Scipy interp2d interpolate masked fill values)进行二维插值

如果有一种方法可以对要填充的掩码数组中的所有值进行插值,而不是对常量填充进行插值,那么它将解决该问题,因为我将处理一个填充的numpy数组。

我不能使用compressed的原因是它可以更改索引的顺序和数组的大小,例如:

points = np.array([1, 2, 3, 4, 5, 6])

points = ma.stack([
    ma.array(points, mask=[0, 0, 0, 0, 1, 0]),
    ma.array(points, mask=[0, 0, 1, 0, 0, 0]),
])

print(points)
# [[1 2 3 4 -- 6]
# [1 2 -- 4 5 6]]

print(np.reshape(points.compressed(), (2, 5)))
# [[1 2 3 4 6]
# [1 2 4 5 6]]

0 个答案:

没有答案