【发布时间】:2018-07-20 06:57:11
【问题描述】:
这是我第一次使用 python、scipy 和此任务所需的所有概念。
我使用 Mathematica 计算并在 3D 绘图中显示一个非常复杂的函数。从 Mathematica 导出是一件非常痛苦的事情,并且永远不会在合理的时间范围内提供已发布的数字。 Gnuplot 对 3D 绘图也不是很好,因此我通过使用 matplotlib。通读文档,我看到所有绘图示例都涉及用户定义为向量的简单函数和变量。我的第一个问题如下:
我可以将 Mathematica 中的函数数据导出到一个包含 3 个制表符分隔列的文件中(如果有帮助,分隔可以是别的东西!)。第一列是 x 轴,第二列是 y,第三列是 z 轴。我需要绘制的基本上是z(x,y)。
如何导入此类数据文件进行绘图?
第二个问题是:为了获得平滑的曲面图,我是否需要对数据进行某种插值?如果是这种情况,那么从我描述的文件中导入的数据如何处理?
从这个例子here 中,scipy.interpolate.interp2d 函数(?)需要两个一维向量 x 和 y 以及一个二维向量 z,以便获得一个插值函数 z(x,y)。但我的数据是 x(第一列)是一维向量,y(第二列)是一维向量,z(第三列)是一维向量。
给出的示例让我有些困惑,因为它们使用定义的 x 和 y 向量以及 z 的函数,然后他们继续进行插值(我在这里看不到插值点)。
我希望有人会用这个为我指明正确的方向!
【问题讨论】:
-
使用np.genfromtext、Python's csv reader 或pandas csv reader 加载您的文件。然后使用 scipy.interpolate.griddata 对数据进行上采样。
-
感谢您的建议。我将尝试使用建议的选项之一进行导入。我仍然对插值感到困惑。所有示例都使用 f(x) 之类的函数来插入其值。我可能不明白这应该如何工作,但这不是我需要的。正如我所说,我的函数的值位于文件的第 3 列,而 x 和 y 是前 2 列。我怎样才能获得这种情况下的插值?我没有可以使用表达式的函数。
标签: python numpy matplotlib scipy