Python numpy数组中的轴标签

Python numpy数组中的轴标签,python,numpy,Python,Numpy,np.ndarray是否具有携带轴标签的功能 假设我有一个二维数组,维度是时间和速度。我希望在对象中嵌入两个轴标签(时间和速度值),以便每当我对数组进行操作(例如切片或甚至打印)时,对象都会处理轴 找了一会儿,我什么也没找到。我正要开始自己编写这样一个类,然后我想在这里提问,以防万一我错过了什么 谢谢 编辑 考虑到目前为止的评论和答案,我认为我还没有清楚地解释我的自我,或者只是因为一个过于简单的例子[时间、速度],我想要什么的背后的原因并不清楚 在我工作的领域中,通常会有来自多个传感器的记录,然

np.ndarray是否具有携带轴标签的功能

假设我有一个二维数组,维度是时间和速度。我希望在对象中嵌入两个轴标签(时间和速度值),以便每当我对数组进行操作(例如切片或甚至打印)时,对象都会处理轴

找了一会儿,我什么也没找到。我正要开始自己编写这样一个类,然后我想在这里提问,以防万一我错过了什么

谢谢

编辑 考虑到目前为止的评论和答案,我认为我还没有清楚地解释我的自我,或者只是因为一个过于简单的例子[时间、速度],我想要什么的背后的原因并不清楚

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

当使用纯numpy.ndarray时,您将得到变量:
数据
,一个包含记录数据的三维数组<代码>传感器,一个一维np.recarray,包含每个传感器的所有信息(例如名称、位置等)<代码>事件,一维np.recarray,包含每个样本/事件的所有信息(例如类型、偏移量等);时间,一个有时间值的向量

我想要的是将所有这些信息放在一个对象
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所提到的,熊猫的数据帧与我想要的非常接近。但是,除了N-D数组仍然是实验性的这一事实之外,它似乎过于倾向于表式行为(就我到目前为止所阅读的内容而言),例如,将第一个维度与其他维度区别对待(项目与列)

值得吗? 上面的内容可能看起来微不足道,也不值得付出努力,但几年前我用这样的功能编写了np.ndarray的一个子类,我可以向您保证,它让我的生活和代码变得轻松多了!(具体应用类似于上述示例[传感器、样本、时间])。但那是在我学习python的时候,我编写python的方式并不是你所说的漂亮。它还存在一些基本错误,例如轴标签不遵循与np.ndarray相同的共享内存规则


在着手重写这件事并将其公之于众之前,我想知道是否有类似的东西存在。

numpy
数组是抽象对象,可以用来构建带标签的表和绘图
pandas
推送表格和数据系列角度,
matplotlib
推送打印角度。对于大型数据存储,如超级计算机模型生成的数据,有NETCDF和HDF5等系统

您可能希望了解HDF5如何处理标注比例,以及
h5py
如何允许您在
numpy
中访问它们

数据集是多维数组。HDF5支持标注尺寸并将一个或“尺寸比例”与每个尺寸关联。维度比例只是另一个HDF5数据集

从轴创建数组是一项常见的
numpy
任务
np.arange
np.linspace
创建1d数组、
np.meshgrid
mgrid
ogrid
创建2d(或更大)数组,这些数组依次用于计算网格上的值。请注意,
meshgrid
允许您指定
ij
xy
样式,反映两种约定,行/列v打印水平/垂直轴

 X, Y = np.meshgrid(x,y)
 z = my_function(X,Y)
但打印功能可以采用各种形式的输入:

 plot(x, y, z)   # 2 1d arrays and a 2d
 scatter(X,Y,Z)  # 3 2d arrays
 scatter(XYZ)    # 1 Nx3 array
因此,虽然这是生成数组和依赖数组之间的连接,但这是一个更高级别的组织,您的代码必须维护它,而不是
numpy
为您做的事情


提到的注释
结构化数组
。它可以将二维数组的
替换为命名的
字段
(并扩展到更高的维度),但在处理从CSV文件加载的各种数据时最有用。它们更像SQL表的字段,而不是绘图的
y
坐标

您可能正在寻找的是


根据其文件:

xarray:Python中的N-D标记数组和数据集 xarray(以前叫xray)是一个开源项目和Python包,它使使用带标签的多维数组变得简单、高效和有趣

Xarray以尺寸、坐标和属性的形式在原始NumPy类数组的基础上引入了标签,这使得开发人员体验更直观、更简洁、更不容易出错