在 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))
...
我想实现两件事:
自动执行上述语句以循环方式执行并创建任何所需的 (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,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])
在我的脚本中,我手动创建了几个数据集:
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))
...
我想实现两件事:
自动执行上述语句以循环方式执行并创建任何所需的 (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,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])