Python 3.x 在Python Pytables中自动创建多个数据集
在我的脚本中,我手动创建了几个数据集:Python 3.x 在Python Pytables中自动创建多个数据集,python-3.x,numpy,append,data-science,pytables,Python 3.x,Numpy,Append,Data Science,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.
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))
...
我想实现两件事:
.append
方法(如下所示),我还希望自动执行该方法:
dset1.append(np_array1)
dset2.append(np_array2)
dset3.append(np_array3)
...
非常感谢您的帮助。如果没有更多细节,很难提供具体的建议。如果已经有了NumPy数组,那么可以在一次调用中使用数据创建array(使用
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")
如果在创建数据集时没有数组,可以在第一个循环中创建耳环,然后在第二个循环中添加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])
令人惊叹的。因此,我在创建时没有数组,在回答的最后一块(代码)之后也没有数组。如何引用要附加的已创建数据集?例如,如果你看我上面的问题,我将它们称为
dset1
,dset2
。。。我尝试了name=f'dset{cnt}'
然后name=h5f.create\u array…
但是没有成功,有什么建议吗?如果你知道数据集名称,你可以使用h5f.get\u node(where,name)
以该名称返回对象<代码>其中可以是完整路径(名称
不需要),或者其中
可以是组路径,并且名称
是必需的。这将获取名称为dataset{cnt}的数据集:h5f.get_节点(“/”,“dataset”+str(cnt))