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/