【问题标题】:2D Interpolation over list of points Python点列表上的 2D 插值 Python
【发布时间】:2016-01-19 21:13:37
【问题描述】:

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

我正在研究 2D 机翼截面,我知道机翼的每个坐标点 (x_inf,y_inf) 上的压力(标量),并且我想将此压力内插到机翼的另一个离散化点((x_profil ,y_profile) 坐标)。这是我拥有的配置文件的图片((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)

我正在使用 Python 2.7.10、scipy 0.16.1 和 numpy 1.9.2,在带有 Enthought Canopy 的 Windows 7 上运行。

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

提前非常感谢!

【问题讨论】:

  • 您是在测量机翼周围的气压还是由压力引起的机翼上的力?一种需要压力值的二维数组,另一种需要一维数组。
  • 我测量的是机翼周围的气压,而不是力。它也可以是另一个标量值,例如密度或温度。
  • 所以它不仅限于机翼的轮廓,它也可能是高于或低于一英尺?
  • 你可能需要定义另一个参数,T,所以你可以有一个函数,它接受任何 T 并返回坐标和压力
  • 在这种情况下,我需要皮肤上的值。我正在比较来自模拟和风洞实验的数据。

标签: python numpy scipy


【解决方案1】:

听起来好像是 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 明确表示完整坐标

【讨论】:

  • 这个“强制 x 和 y 明确表示完整坐标”怎么做?似乎没有输入参数来强制执行此操作....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多