问题描述
在我的脚本中,我手动创建了几个数据集:
import tables
dset1 = f.create_earray(f.root,"dataset1",atom=tables.Float64Atom(),shape=(0,2))
dset2 = f.create_earray(f.root,"dataset2",2))
dset3 = f.create_earray(f.root,"dataset3",2))
...
我想实现两件事:
-
使以上语句自动化以循环方式执行并创建任何所需的(N)个数据集
-
然后我也按顺序使用
.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,atom=tables.Float64Atom(),shape=(0,2))
# get array data...
arr_list = [arr1,arr3]
# add array data
for cnt in range(1,4):
h5f.get_node("/","dataset"+str(cnt)).append(arr_list[cnt-1])