在 Python-Pytables 中自动创建多个数据集

Automated creation of multiple datasets in Python-Pytables

在我的脚本中,我手动创建了几个数据集:

    import tables
    dset1 = f.create_earray(f.root, "dataset1", atom=tables.Float64Atom(), shape=(0, 2))
    dset2 = f.create_earray(f.root, "dataset2", atom=tables.Float64Atom(), shape=(0, 2))
    dset3 = f.create_earray(f.root, "dataset3", atom=tables.Float64Atom(), shape=(0, 2))
    ...

我想实现两件事:

  1. 自动执行上述语句以循环方式执行并创建任何所需的 (N) 个数据集

  2. 然后我也按顺序使用 .append 方法(如下所示)我也想自动化:

     dset1.append(np_array1) 
     dset2.append(np_array2) 
     dset3.append(np_array3) 
     ...
    

需要任何帮助吗?

如果没有更多细节,很难提供具体建议。如果您已经拥有 NumPy 数组,则可以在一次调用中使用数据创建 EArray(使用 obj= 参数)。这是一个小代码片段,展示了如何在循环中执行此操作。

import tables as tb
import numpy as np

with tb.File('SO_64397597.h5','w') as h5f:
    
    arr1  = np.ones((10,2))
    arr2  = 2.*np.ones((10,2))
    arr3  = 3.*np.ones((10,2))
    arr_list = [arr1, arr2, arr3]
    for cnt in range(1,4):
        h5f.create_earray("/", "dataset"+str(cnt), obj=arr_list[cnt-1])

上面的代码没有创建数据集对象。如果您需要它们,您可以通过以下调用以编程方式访问:

# input where as path to node, name not required
ds = h5f.get_node("/dataset1")
# or
# input where as path to group, and name as dataset name
ds = h5f.get_node("/","dataset1") 

如果您在创建数据集时没有数组,您可以在第一个循环中创建 EArray,然后在第二个循环中添加 np.array 数据。见下文:

with tb.File('SO_64397597.h5','w') as h5f:
    
    for cnt in range(1,4):
        h5f.create_earray("/", "dataset"+str(cnt), atom=tables.Float64Atom(), shape=(0, 2))

        # get array data...
        arr_list = [arr1, arr2, arr3]
        # add array data
        for cnt in range(1,4):
            h5f.get_node("/","dataset"+str(cnt)).append(arr_list[cnt-1])