如何存储 X-Y 数据以便使用 Numpy 中的函数?

How to store X-Y data in order to use the functions in Numpy?

NumpyScipy 都有许多有用的函数用于对数据执行操作(即积分、傅里叶变换、基线校正等)。但是,我还没有看到有关将 X-Y 数据输入这些函数的一般形式的文档。假设我有波长和吸光度值的光谱,或者来自机械性能测试的应力和应变数据。

一般做一个:

  1. 使用两个一维 Numpy 数组,一个用于 X,一个用于 Y?

  2. 使用一个二维 Numpy 数组,X 在一个轴上,Y 在另一个轴上?

  3. 使用单个 structured array?

当您有 XY-Z 数据时,这有何变化?

XY 数据最通用的数据结构是什么,它允许我将我的数据直接输入到 大多数 这些函数中而无需重新定义我的数据存储方式?

检查每个包和操作 class 或功能的文档。 scipy 是包的集合,由不同的人编写,并且通常为更旧的 Fortran 或 C 包提供接口。所以输入格式受这些来源的限制。而且他们还取决于什么适合解决问题。

通常在规则网格上生成值很方便。例如,使用 np.meshgridnp.mgridarangelinspace 值来定义 2d space。结果可以是 3 个二维数组 - xy 值,以及作为这些值的函数的 z

但现实世界的数据通常以散点形式提供。然后每个点都是 xy 位置和 z 值。您不能将它们转换为二维数组,至少在没有插值的情况下不能。所以三个一维数组是合适的表示。或 (n, 3) 矩阵,每个变量一列。或者,如果值具有不同的 dtype - 假设 x 和 y 为整数,z 为浮点数,然后是具有 3 个字段的结构化数组。

通常从 csv 文件加载数据 - 代表这些 x,y,z 值的列,可能带有字符串标签和多个 z 值。对于混合数据类型,它们通常加载 genfromtxt,从而产生一维结构化数组。

从结构化数组映射到具有统一 dtype 的多个数组很容易。有时您只需使用字段名称进行索引即可,其他情况下可能需要 view.

要深入研究这一点,您可能需要扩展数据类型以及您需要使用的包。

http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html#scipy.interpolate.griddatainterpolate.griddata 说明了点数据和网格数据的使用。

虽然这不是您问题的答案,但要知道,如果您只使用两个或三个维度,您可以轻松地从一种标准切换到另一种标准,这要归功于
XYZ = np.column_stack((X, Y, Z))X, Y, Z = XYZ.tranpose().

通常,与您的其他数据分析相比,它们都是相当便宜的操作。