Python Scipy interp1d插值遮罩阵列
我有蒙版数组(玩具示例)[1 2 3 4--6]Python Scipy interp1d插值遮罩阵列,python,arrays,numpy,scipy,Python,Arrays,Numpy,Scipy,我有蒙版数组(玩具示例)[1 2 3 4--6] points=[1,2,3,4,0,6] 掩码=[0,0,0,0,1,0] 点=毫安阵列(点,掩码=掩码) 我想把它从6维插值到任何数字,例如,6维。 我的插值标准是,它将忽略屏蔽值,并跳过该索引 不希望出现的行为,例如使用lin=np.linspace(0,1,6): f=interp1d(lin,点,轴=0,kind='cubic') f(林)#[1 2 3 4-8.8817842e-16 6] 相反,我希望它的行为像: compress
points=[1,2,3,4,0,6]
掩码=[0,0,0,0,1,0]
点=毫安阵列(点,掩码=掩码)
我想把它从6维插值到任何数字,例如,6维。
我的插值标准是,它将忽略屏蔽值,并跳过该索引
不希望出现的行为,例如使用lin=np.linspace(0,1,6)
:
f=interp1d(lin,点,轴=0,kind='cubic')
f(林)#[1 2 3 4-8.8817842e-16 6]
相反,我希望它的行为像:
compressed_lin=[0,0.2,0.4,0.6,1]
压缩的_点=np.数组([1,2,3,4,6])
f=interp1d(压缩线,压缩点,轴=0,种类=立方)
f(林)#[1 2 3 4 5 6]
实际数据:
我的数据是[100100,2]
的形状,因此它不像从大小为100的linspace
中隐藏屏蔽值那样简单
关于遮罩阵列,请注意:
我已经知道有一种方法可以在屏蔽阵列上进行2d插值(,)
如果有一种方法可以插值遮罩数组中要填充的所有值,而不是常量填充,这将解决问题,因为我将处理填充的numpy数组
我不能使用compressed
的原因是它可以更改索引的顺序和数组的大小,例如:
points=np.array([1,2,3,4,5,6])
点数=毫安([
ma.数组(点,掩码=[0,0,0,0,1,0]),
ma.数组(点,掩码=[0,0,1,0,0,0]),
])
打印(点数)
# [[1 2 3 4 -- 6]
# [1 2 -- 4 5 6]]
打印(np.重塑(points.compressed(),(2,5)))
# [[1 2 3 4 6]
# [1 2 4 5 6]]
您已经看到了我关于np.ma
工作原理的解释。只有np.ma
函数和方法知道掩码
,知道何时/如何应用填充的和压缩的。其他任何内容都会使用数据
属性,无需修改。谢谢@hpaulj您的回答确实非常有用,我依靠它实现了许多功能。然而,我找不到一种方法来使用它来处理这个案例。由于无法使用填充的
或压缩的
,我在问题上添加了注释。我知道interp1d
只使用数据
本身,但我正试图弄清楚如何(有效地)实现这一点。你说你的数据大于1维,那么应该插值哪个维?您提供的虚拟问题与实际问题在性质上不同。不同维度上的插值可能导致不同的插值。