我看到 HDF5 至少有两种方法。您可以将所有数据复制到一个文件中。千兆字节的数据对于 HDF5 来说不是问题(如果有足够的资源)。或者,您可以将患者数据保存在单独的文件中,并使用外部链接指向中央 HDF5 文件中的数据。创建链接后,您可以“如同”访问该文件中的数据。下面显示的两种方法都是使用 Numpy 随机创建的小而简单的“样本”。每个样本都是一个数据集,包括带有医院、患者和样本 ID 的属性。
方法1:单个文件中的所有数据
num_h = 3
num_p = 5
num_s = 2
with h5py.File('SO_59556149.h5', 'w') as h5f:
for h_cnt in range(num_h):
for p_cnt in range(num_p):
for s_cnt in range(num_s):
ds_name = 'H_' + str(h_cnt) + \
'_P_' + str(p_cnt) + \
'_S_' + str(s_cnt)
# Create sample vector data and add to a dataset
vec_arr = np.random.rand(1000,1)
dset = h5f.create_dataset(ds_name, data=vec_arr )
# add attributes of Hospital, Patient and Sample ID
dset.attrs['Hospital ID']=h_cnt
dset.attrs['Patient ID']=p_cnt
dset.attrs['Sample ID']=s_cnt
方法 2:在单独文件中指向患者数据的外部链接
num_h = 3
num_p = 5
num_s = 2
with h5py.File('SO_59556149_link.h5', 'w') as h5f:
for h_cnt in range(num_h):
for p_cnt in range(num_p):
fname = 'SO_59556149_' + 'H_' + str(h_cnt) + '_P_' + str(p_cnt) + '.h5'
h5f2 = h5py.File(fname, 'w')
for s_cnt in range(num_s):
ds_name = 'H_' + str(h_cnt) + \
'_P_' + str(p_cnt) + \
'_S_' + str(s_cnt)
# Create sample vector data and add to a dataset
vec_arr = np.random.rand(1000,1)
dset = h5f2.create_dataset(ds_name, data=vec_arr )
# add attributes of Hospital, Patient and Sample ID
dset.attrs['Hospital ID']=h_cnt
dset.attrs['Patient ID']=p_cnt
dset.attrs['Sample ID']=s_cnt
h5f[ds_name] = h5py.ExternalLink(fname, ds_name)
h5f2.close()