Python 使用pytables存储不规则(可变长度)数组对象 我将通过指出我很乐意考虑PyTabes的替代品来序言这个问题,但是我更愿意使用PyTabes以从NoNeXPR功能中受益。
我正在寻找一种存储/探索/分析数据的解决方案,例如以下形式:假设我有许多事件对象,表示某一时刻的一些实验测量。每个事件都包含一些标量场,以及数量可变的粒子对象,每个粒子对象都包含自己的一些标量场。见下面我的画 我的第一个想法是将每个事件作为表格中的一行。我知道pytables中有一个VLArray类型,但似乎它们只能存储基本数据类型。有没有办法用pytables存储这些数据 我还考虑将每个事件作为自己的组,并使用包含可变行数的粒子表。但是,我预计会有数百万个事件,我希望能够选择事件并绘制某些字段,就像处理表中的行一样 如果使用pytables无法实现这一点,有哪些替代解决方案Python 使用pytables存储不规则(可变长度)数组对象 我将通过指出我很乐意考虑PyTabes的替代品来序言这个问题,但是我更愿意使用PyTabes以从NoNeXPR功能中受益。,python,data-analysis,pytables,Python,Data Analysis,Pytables,我正在寻找一种存储/探索/分析数据的解决方案,例如以下形式:假设我有许多事件对象,表示某一时刻的一些实验测量。每个事件都包含一些标量场,以及数量可变的粒子对象,每个粒子对象都包含自己的一些标量场。见下面我的画 我的第一个想法是将每个事件作为表格中的一行。我知道pytables中有一个VLArray类型,但似乎它们只能存储基本数据类型。有没有办法用pytables存储这些数据 我还考虑将每个事件作为自己的组,并使用包含可变行数的粒子表。但是,我预计会有数百万个事件,我希望能够选择事件并绘制某些字段
+-------------------------+
+-------------------------+ |
+--------- Event ---------+ | |
| timestamp (int) | | |
| temperature (float) | | |
| latitude (float) | | |
| longitude (float) | | |
| ... [etc]... | | |
| | | |
| +-- Particle<1> --+ | | |
| | idx (int) | | | |
| | energy (float) | | | |
| | x (float) | | | |
| | y (float) | | | |
| | z (float) | | | |
| | ... [etc] ... | | | |
| +-----------------+ | | |
| ... | | |
| +-- Particle<N> --+ | | |
| | idx (int) | | | |
| | energy (float) | | | |
| | x (float) | | | |
| | y (float) | | | |
| | z (float) | | | |
| | ... [etc] ... | | | +
| +-----------------+ | +
+-------------------------+
您可以使用数据库样式,使用两个表。一个用于活动:
+-------------------------+
+-------------------------+ |
+--------- Event ---------+ | |
| timestamp (int) | | |
| temperature (float) | | |
| latitude (float) | | +
| longitude (float) | +
+-------------------------+
一个用于粒子,带有外键:
+-------------------------+
+-------------------------+ |
+-------- Particle -------+ | |
| event (?) | | |
| idx (int) | | |
| energy (float) | | |
| x (float) | | |
| z (float) | | +
| ... [etc] ... | +
+-------------------------+
Particle.event的类型可以是事件表中的int索引,也可以与添加到事件中的id列相匹配,甚至可以是一个对象类型,实际上是指向事件的指针。它们都有不同的权衡
还可以通过将事件数据复制到每个粒子记录中来反规范化。这可能会为某些用例提供更好的性能,但会牺牲存储数据中的一些冗余