我有插值问题。它不应该太复杂,但我找不到任何有效的解决方案。
我正在研究2D机翼部分,我知道机翼的每个坐标点(x_inf,y_inf)上的压力(标量),我想在机翼的另一个离散化上插入这个压力((x_profil) ,y_profil)坐标)。这是我的配置文件((x_inf,y_inf),绿色)和我想要插入的网格((x_profil,y_profil),红色)的图片。 Points for interpolation。 数据x_inf,y_inf,p_inf是相同大小的numpy数组(它们是从特定文件中提取的)。 x_profil,y_profil也是相同大小的numpy数组(但与_inf数据不同)。
我首先尝试了interp2d函数,但结果是一个大小的数组,我插入的点的大小的平方。
pressure=interp2d(x_inf,y_inf,p_inf)
p_profil=pressure(x_profil,y_profil)
我还尝试使用interp1d仅在x轴上进行插值,但这也不起作用。将插值类型设置为"最接近"或"零"工作,但有"孔"在插值中,如图所示:presure interpolation,其中绿点是输入数据,红色是插值。
pressure=interp1d(x_inf,p_inf,kind='zero',bounds_error=False)
p_profil=pressure(x_profil)
我在使用Enthought Canopy在Windows 7上运行python 2.7.10,scipy 0.16.1和numpy 1.9.2。
有没有人知道如何解决我的问题?
提前多多谢谢!
答案 0 :(得分:1)
听起来似乎正在发生的是interp2d函数认为你正在将它作为常规网格。来自numpy Docs:
> 定义数据点坐标的数组。 如果点位于规则网格上,则x可以指定列坐标,y可以指定行坐标,例如:
x,y:array_like x = [0,1,2]; y = [0,3]; z = [[1,2,3],[4,5,6]] 否则,x和y必须指定每个点的完整坐标,例如:
x = [0,1,2,0,1,2]; y = [0,0,0,3,3,3]; z = [1,2,3,4,5,6] 如果x和y是多维的,则在使用前它们会变平。
z:array_like 要在数据点处插值的函数的值。如果z是多维数组,则在使用前将其展平。如果x和y指定列和行坐标,则展平z数组的长度为len(x)* len(y);如果x和y指定,则为len(z)== len(x)== len(y)每个点的坐标。
听起来你需要强制x和y明确指出全坐标