繁体   English   中英

点列表上的2D插值Python

[英]2D Interpolation over list of points Python

我有一个插值问题。 它应该不会太复杂,但是我找不到任何有效的解决方案。

我正在研究2D机翼部分,我知道机翼坐标(x_inf,y_inf)的每个点上的压力(标量),并且我想将此压力插值到机翼的其他离散化((x_profil,y_profil)坐标)。 这是我拥有的配置文件的图片((x_inf,y_inf),绿色)和我要插值的网格((x_profil,y_profil),红色)。 插补点 数据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轴上进行插值,但这也不起作用。 将插值的类型设置为“最近”或“零”是可行的,但是插值中有“空洞”,如您在此图中所看到的:保证插值 ,其中绿点是输入数据,红色是插值。

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。

有谁知道我该如何解决我的问题?

非常感谢!

听起来好像是interp2d函数认为您正在将其粘贴到常规网格中。 从numpy文档中:

>定义数据点坐标的数组。 如果这些点位于规则网格上,则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明确显示为完整坐标

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM