通过点列表Python

时间:2016-01-19 21:13:37

标签: python numpy scipy

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

我正在研究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。

有没有人知道如何解决我的问题?

提前多多谢谢!

1 个答案:

答案 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明确指出全坐标