我在前面提到这个问题,并指出我很乐意考虑pytables的替代方案,但我更倾向于使用pytables来获益于numexpr功能。
我正在寻找存储/探索/分析我的数据的解决方案,例如以下形式:假设我有很多Event
个对象,代表某个时刻的某些实验测量。每个Event
包含一些标量字段,以及Particle
个对象的变量数,每个对象都包含一些自己的标量字段。看我的"绘图"下方。
我的第一个想法是将每个Event
作为表中的一行。我知道pytables中有VLArray
类型,但似乎这些只能存储原始数据类型。有没有办法用pytables存储这些数据?
我还考虑让每个Event
成为自己的组,其中Particle
表包含可变数量的行。但是,我预计有数百万Events
,我希望能够例如选择事件并绘制某些字段,就像对表中的行一样。
如果用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] ... | | | +
| +-----------------+ | +
+-------------------------+
答案 0 :(得分:0)
您可以使用两个表来实现数据库样式。一个事件:
+-------------------------+
+-------------------------+ |
+--------- Event ---------+ | |
| timestamp (int) | | |
| temperature (float) | | |
| latitude (float) | | +
| longitude (float) | +
+-------------------------+
其中一个是Particles,带有“外键”:
+-------------------------+
+-------------------------+ |
+-------- Particle -------+ | |
| event (?) | | |
| idx (int) | | |
| energy (float) | | |
| x (float) | | |
| z (float) | | +
| ... [etc] ... | +
+-------------------------+
Particle.event
的类型可以是int
表中的Events
索引,也可以与添加到id
的{{1}}列匹配,或者它甚至可以是Events
类型,它实际上是指向object
的指针。他们都有不同的权衡。
您还可以通过将Event
数据复制到每个Event
记录中来“去规范化”。这可以为某些用例提供更好的性能,但代价是存储数据中存在一些冗余。