1

我试图通过chunkshape在创建表时指定来提高我的 pytables/HDF5 代码的性能。我无法弄清楚chunkshape参数的真实尺寸或格式。我可以从代码中看到,它最终会成为一个包含单个元素的元组。

这个单个元素应该是行数、字节数还是什么?

我的具体问题是我现有的代码可以创建一个包含 20 列的 HDF5 表。我想更改表的块,以便每列连续存储在磁盘上。因此,优化一次读取整个列。

我尝试将 chunkshape 设置为 20(列数),但这大大降低了读取整列的性能。是否应该将块形状设置为单行的宽度(以字节为单位)?

我只想知道如果出现以下情况,chunkshape 应该是什么:

  1. 我想尽可能快地阅读整个专栏。
  2. 我确切地知道表中有多少列。
  3. 出于向后兼容的原因,我不能简单地将表更改为将现有行作为列,反之亦然。
4

1 回答 1

4

chunkshapeinPyTables指定应该连续存储在磁盘上的每行和每列的元素数(这就是它是元组的原因)。

因此,例如,如果您的数据集是 10,000 x 20(10,000 行,20 列)并且您总是一次访问一列,那么在给定最佳块大小的情况下,每个块应包含尽可能多的列(参见此处更多细节)。

如果您知道您将拥有多少行并且它们不是那么大,您可以指定一个块形状(10.000,1)(或更少的行)。因此,如果您访问所有 20 列,则需要 20 次访问。

于 2012-09-19T08:00:02.830 回答