gpt4 book ai didi

python - 将大量数据附加到表 (HDF5) 数据库,其中 database.numcols != newdata.numcols?

转载 作者:行者123 更新时间:2023-12-03 18:19:45 25 4
gpt4 key购买 nike

我正在尝试将大型数据集 (>30Gb) 附加到现有的 pytables 表。表格为N列,数据集为N-1列;一列是在我知道其他 N-1 列之后计算的。

我正在使用 numpy.fromfile() 将数据集的 block 读入内存,然后再将其附加到数据库。理想情况下,我想将数据存入数据库,然后计算最后一列,最后使用 Table.modifyColumn() 完成操作。

我考虑过将 numpy.zeros((len(new_data), N)) 附加到表中,然后使用 Table.modifyColumns() 来填充新数据,但我希望有人知道避免为我需要追加的每个 block 生成大量空数据的好方法。

最佳答案

如果列都是同一类型,您可以使用 numpy.lib.stride_tricks.as_strided 使您从形状 (L, N-1) 文件中读取的数组看起来像形状(L,N)。例如,

In [5]: a = numpy.arange(12).reshape(4,3)

In [6]: a
Out[6]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])

In [7]: a.strides
Out[7]: (24, 8)

In [8]: b = numpy.lib.stride_tricks.as_strided(a, shape=(4, 4), strides=(24, 8))

In [9]: b
Out[9]:
array([[ 0, 1, 2, 3],
[ 3, 4, 5, 6],
[ 6, 7, 8, 9],
[ 9, 10, 11, 112]])

现在您可以使用这个数组 b 来填充表格。每行的最后一列将与下一行的第一列相同,但当您可以计算值时,您将覆盖它们。

如果 a 是记录数组(即具有复杂的 dtype),这将不起作用。为此,您可以尝试 numpy.lib.recfunctions.append_fields。因为它将数据复制到一个新数组,所以它不会为您节省任何大量内存,但它允许您一次完成所有写入。

关于python - 将大量数据附加到表 (HDF5) 数据库,其中 database.numcols != newdata.numcols?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7327739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com