Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pytables存储不规则(可变长度)数组对象 我将通过指出我很乐意考虑PyTabes的替代品来序言这个问题,但是我更愿意使用PyTabes以从NoNeXPR功能中受益。_Python_Data Analysis_Pytables - Fatal编程技术网

Python 使用pytables存储不规则(可变长度)数组对象 我将通过指出我很乐意考虑PyTabes的替代品来序言这个问题,但是我更愿意使用PyTabes以从NoNeXPR功能中受益。

Python 使用pytables存储不规则(可变长度)数组对象 我将通过指出我很乐意考虑PyTabes的替代品来序言这个问题,但是我更愿意使用PyTabes以从NoNeXPR功能中受益。,python,data-analysis,pytables,Python,Data Analysis,Pytables,我正在寻找一种存储/探索/分析数据的解决方案,例如以下形式:假设我有许多事件对象,表示某一时刻的一些实验测量。每个事件都包含一些标量场,以及数量可变的粒子对象,每个粒子对象都包含自己的一些标量场。见下面我的画 我的第一个想法是将每个事件作为表格中的一行。我知道pytables中有一个VLArray类型,但似乎它们只能存储基本数据类型。有没有办法用pytables存储这些数据 我还考虑将每个事件作为自己的组,并使用包含可变行数的粒子表。但是,我预计会有数百万个事件,我希望能够选择事件并绘制某些字段

我正在寻找一种存储/探索/分析数据的解决方案,例如以下形式:假设我有许多事件对象,表示某一时刻的一些实验测量。每个事件都包含一些标量场,以及数量可变的粒子对象,每个粒子对象都包含自己的一些标量场。见下面我的画

我的第一个想法是将每个事件作为表格中的一行。我知道pytables中有一个VLArray类型,但似乎它们只能存储基本数据类型。有没有办法用pytables存储这些数据

我还考虑将每个事件作为自己的组,并使用包含可变行数的粒子表。但是,我预计会有数百万个事件,我希望能够选择事件并绘制某些字段,就像处理表中的行一样

如果使用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列相匹配,甚至可以是一个对象类型,实际上是指向事件的指针。它们都有不同的权衡

还可以通过将事件数据复制到每个粒子记录中来反规范化。这可能会为某些用例提供更好的性能,但会牺牲存储数据中的一些冗余