如何从numpy数据集文件创建hdf5文件

jjhzyzn0  于 2022-12-18  发布在  其他
关注(0)|答案(2)|浏览(170)

我有1970个.npy文件作为MSVD数据集的特征。我想从这些numpy文件创建一个.hdf5文件。

import os 
import numpy as np
import hdf5

TRAIN_FEATURE_DIR = "MSVD"   

for filename in os.listdir(TRAIN_FEATURE_DIR):
    f = np.load(os.path.join(TRAIN_FEATURE_DIR, filename))
...
bwntbbo3

bwntbbo31#

从数组创建数据集很简单。下面的示例循环遍历文件夹中的所有.npy文件,并为每个数组创建一个数据集。(仅供参考,我更喜欢glob.iglob()使用通配符获取文件名。)数据集名称与文件名相同。

import glob 
import numpy as np
import h5py

with h5py.File('SO_74788877.h5','w') as h5f:
    for filename in glob.iglob('*.npy'):
        arr = np.load(filename)
        h5f.create_dataset(filename,data=arr)

以下代码显示了如何从上面创建的H5文件中访问数据集名称和值。(dataset是一个数据集对象,在许多情况下,其行为类似于numpy数组):

with h5py.File('SO_74788877.h5','r') as h5f:
    for name, dataset in h5f.items():
        print(name, dataset.shape, dataset.dtype)
ao218c7q

ao218c7q2#

下面的代码解决了我的问题:

import os 
import numpy as np
import h5py

TRAIN_FEATURE_DIR = "MSVD"                    # MSVD ==> numpy folder path 

h5 = h5py.File("out.hdf5", 'w')               # out ==> output hdf5 file name

for filename in os.listdir(TRAIN_FEATURE_DIR):
    
    video_id = os.path.splitext(filename)[0]  # optional, to remove '.npy'   
    video_id = video_id.split('.')[0]         # optional, to remove '.avi' from video_id
    
    f = np.load(os.path.join(TRAIN_FEATURE_DIR, filename))
    h5[video_id] = f
   
     
h5.close()

相关问题