python - numpy 数组中的轴标签

标签 python numpy

np.ndarray有携带坐标轴标签的功能吗?

假设我有一个二维数组,维度是时间和速度。我实际上想将两个轴标签(时间和速度值)嵌入到一个对象中,以便在我对数组进行操作(例如切片甚至绘图)时对象负责处理轴。

找了好久都没找到。我正要开始自己编写这样一个类,然后我想在这里问一下,以防我遗漏了什么。

谢谢

编辑

鉴于到目前为止的评论和答案,我认为我没有解释清楚我自己,或者只是由于过于简单的示例 [时间,速度],我想要的背后的推理不清楚。

在我工作的现场,通常会记录来自多个传感器的数据,然后对数据进行分段,以便获得多个样本/事件。如果每个传感器捕获一个跨时间的一维信号,则一个具有维度 [Sensor, Event, Time](维度隐含在数据本身中)。

当使用纯 numpy.ndarray 时,您最终会得到变量:data,一个包含记录数据的 3-D 数组; sensor,一维 np.recarray,包含每个传感器的所有信息(例如名称、位置……); event,一维 np.recarray,包含每个样本/事件的所有信息(例如类型、偏移量……);和 Time,一个带有时间值的向量。

我想要的是将所有信息都放在一个对象 mydata 中,而不用担心基本操作(切片)。因此 mydata[0:3, 1:10] 将相应地切片相应的维度。

我同意像绘图这样的事情是特定于数据的,但我很乐意为此类对象的子类编写一些额外的函数(例如 plot)。

为什么这会有用?

可读性:比较

data1 = data[0:3, 1:10]
sensor1 = sensor[0:3]
event1 = event[1:10]
time1 = time

用一个简单的

mydata1 = mydata[0:3, 1:10]

维护:第二种选择显然更容易维护,并且在正确切片所有关联变量时更不容易出错。

方便:将所有这些信息放在同一个地方允许在类中集成有用和强大的功能。例如,如果我为时间序列创建派生类(强制具有时间轴),我可以运行特定于时间的函数而无需指定时间或采样频率(因为此信息在对象本身内)。这个想法是让一个基类携带轴的标签,并且在必要时自然会出现特定的子类(例如,一个用于时间序列,一个用于视频,一个用于地形信息等)并结合专门的功能。

接近但不完全

正如@user2357112 提到的,Pandas 的 DataFrame 与我正在寻找的很接近。但是,除了 N 维数组仍处于实验阶段这一事实之外,它似乎过于面向类似表格的行为(对于我到目前为止所读的内容),例如以不同于其他维度的方式对待第一个维度(项目与列)。

值得吗?

以上内容可能看起来微不足道,不值得付出努力,但几年前我编写了一个具有此类功能的 np.ndarray 子类,我可以向你保证,它让我的生活和代码变得更加轻松! (具体应用同上例[sensor, sample, time]类似)。但那是在我学习 Python 的时候,我编码它的方式并不是你所说的漂亮。它也有一些根本性的错误,比如轴标签没有遵循与 np.ndarray 相同的共享内存规则。

在着手重写这个东西并将其公开之前,我想知道那里是否有类似的东西。

最佳答案

您可能正在寻找的是 xarray .


来自其文档:

xarray:Python 中的 N 维标记数组和数据集

xarray(以前称为 xray)是一个开源项目和 Python 包,它使处理带标签的多维数组变得简单、高效且有趣!

Xarray 在类似 NumPy 的原始数组之上以维度、坐标和属性的形式引入标签,从而提供更直观、更简洁且不易出错的开发人员体验。该软件包包括一个庞大且不断增长的领域不可知函数库,用于使用这些数据结构进行高级分析和可视化。

Xarray 受到 pandas 的启发并大量借鉴,pandas 是一种流行的数据分析包,专注于标记的表格数据。它特别适合处理作为 xarray 数据模型来源的 netCDF 文件,并与 dask 紧密集成以进行并行计算。

关于python - numpy 数组中的轴标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35488997/

相关文章:

python - 为什么使用 pd.Dataframe() 创建数据帧并手动设置索引时出现 NaN?

python - 嵌套 for 循环到 numpy 卷积

Python从数组中删除 'stationary'数据

python - 查找数组中具有重复键值的 dict 对象

python - 使用 Dask DataFrame 计算前向差异?

python - 在 python 中从 VTK 文件中检索面和点

python - np.loadtxt 忽略 header ,如何保存 header 数据?

python - .sav 文件无效签名异常

python - paramiko:打开和返回 sftp 连接的方法

python - 在覆盖整个 Canvas 的 python Tkinter Canvas 上绘制矩形不显示顶部和左侧边框