【问题标题】:Arrange Pandas DataFrame to be used for scipy interpn安排用于 scipy interpn 的 Pandas DataFrame
【发布时间】:2021-06-19 10:57:55
【问题描述】:

我必须从存储为 Pandas DataFrame 的表格数据中执行 3 或 4 维插值。 我在变量df : DataFrame 中存储了以下数据:

 xm   xA   xl      z     
2.3  4.6  10.0   1.905
2.3  4.6  11.0   1.907
2.3  4.8  10.0   1.908
2.3  4.8  11.0   1.909
2.4  4.6  10.0   1.811
2.4  4.6  11.0   1.812
2.4  4.8  10.0   1.813
2.4  4.8  11.0   1.814

xm, xa, xl 是绘制网格的轴。 z 列包含要从中执行插值的值。确实,我想出的规则网格是这样计算的:

grid = np.meshgrid(*(df.xm,df.xA,df.xl))

现在我的问题是如何将 Z 系列数据从 DataFrame 转换为 np.array 以传递给 Scipy 函数:

from scipy import interpolate
p0 = (xm0,xA0,xl0)
z0 = interpolate.interpn(grid, myarray, p0)

【问题讨论】:

  • grid = np.meshgrid(*(df.xm,df.xA,df.xl)) ?不同于grid = np.meshgrid(df.xm,df.xA,df.xl)
  • 我认为你可以使用df.z.values.reshape(grid[0].shape)之类的东西。

标签: python pandas scipy interpolation


【解决方案1】:

感谢 SCKU 提供关于 z 柱重塑的提示。我正在使用

grid = np.meshgrid(*(df.xm,df.xA,df.xl))

遵循scipy doc 的示例。 其实传基轴数组的元组就够了:

grid = np.meshgrid(xm,xA,xLn)
z = df.z.values.reshape(grid[0].shape)
xt = (df.xM,df.xA,df.xLn)
p0 = (xM0,xA0,xLn0)
val = interpolate.interpn(xt, z, p0)

【讨论】:

  • 感谢来自 scipy 文档链接的信息,我认为他们使用 points = (x, y, z)np.meshgrid(*points) 来提高可读性(数学)。
猜你喜欢
  • 2017-10-22
  • 2017-08-24
  • 2020-10-10
  • 1970-01-01
  • 2018-10-01
  • 2020-06-14
  • 2015-06-17
相关资源
最近更新 更多