【发布时间】:2019-04-02 21:28:43
【问题描述】:
我将首先道歉,因为我对 python 完全陌生(这里是 Fortran 人),并且一直在学习。结果,我的知识中可能存在一些非常明显的漏洞,在阅读我目前的困境后可能会很明显。
我有一些数据需要写入文件,然后可以通过插值算法读取。目前,该插值算法可能是来自 SciPi 的 RectBivariateSpline。虽然 X 和 Y 的间隔不一样,但它们是有规律的,所以这似乎是理想的。
数据一般是这样的形式
X1,Y1,F(X1,Y1)
X1,Y2,F(X1,Y2)
X1,Y3,F(X1,Y3)
X2,Y1,F(X2,Y1)
X2,Y2,F(X2,Y2)
X2,Y3,F(X2,Y3)
等等……
在这种情况下,F(X,Y) 不是明确的数学函数,而是 X,Y 处物理量的数据点。
正在从我基本上无法控制的数据源中读取数据,使用
data_array = np.loadtxt(Path/DataFile, dtype = Float, delimiter = ";", usecols = #)
在这种情况下,可以想象有几个不同的列具有不同的数据,但它们都依赖于 X 和 Y。有一个单独的文件包含有关我读入的 X 和 Y 量的范围和步长的信息并存储在一个数组中。至少,我相当肯定它是一个数组而不是一个列表,因为我在某处读到 np.loadtxt 和 np.genfromtxt 都生成 numpy 数组而不是 vanilla python 列表。
关于如何使用简单的插值例程以最佳方式存储这些数据以传输到另一台机器,我想了很多想法,但我可以提出一些建议。我第一次想到使用
ArrayExample = np.Empty(xRange,yRange)
For n in (xRange)
For m in (yRange)
ArrayExample[n,m] = F(X,Y)
然而,这并不能保留与数组中的值相关的实际数量 X 或 Y,而这些对于插值是必需的,而且对于绘图来说绝对是必需的。
然后我突然想到,既然我已经以一种我可以很容易阅读的形式获得 X 和 Y 的值,我可以执行以下操作。其中 xvalues 和 yvalues 是保存实际 X 和 Y 值的数组。
ArrayExample = np.Empty(xRange,yRange,1)
For n in (xRange)
For m in (yRange)
ArrayExample[n,m,1] = (xvalues[n],yvalues[m],F(X,Y))
之后我想到将 ArrayExample 保存为 pickle 文件以移动到任何地方,然后在另一端使用 pickle 引入。
但是,一旦我有了它,我真的不知道如何让 RectBivariateSpline 获取数据。我已经尝试阅读 scipy 网站上的文档并进行谷歌搜索,但到目前为止我发现的所有内容都毫无帮助。如果有人有任何关于如何使用它的好例子,那将非常有帮助。
如果您有任何建议、想法或批评,我们将不胜感激。
谢谢!
【问题讨论】:
标签: python numpy scipy interpolation