Есть ли способ удаления строк из набора данных HDF5? - PullRequest
0 голосов
/ 28 апреля 2020

Я создал набор данных H5PY с примерно 2,1 миллионами экземпляров. Проблема в том, что я заполнил все строки, кроме последнего. Я хочу удалить последний ряд, но не уверен, насколько это возможно или безопасно.

Это фрагмент того, как создается набор данных:

shape = (dataset_length, args.batch_size, 2048, 1, 1)

with h5py.File(path, mode='a') as hdf5_file:
       array_40 = hdf5_file.create_dataset(
                  f'{phase}_40x_arrays',  shape, maxshape=(None, args.batch_size, 2048, 1, 1)


# either new or checkpointed file exists
# load file and create references to exisitng h5 datasets
with h5py.File(path, mode='r+') as hdf5_file:
      array_40 = hdf5_file[f'{phase}_40x_arrays']

     for i, (inputs40x, labels) in enumerate(dataloaders_dict):

          inputs40x = inputs40x.to(device)
          x40 = resnet(inputs40x)
          array_40[batch_idx, ...] = x40.cpu()

          hdf5_file.flush()

Я не совсем уверен, нужно ли мне копировать все экземпляры в новый набор данных. Я попытался изменить размер, но это не сработало ...

Ура,

1 Ответ

0 голосов
/ 28 апреля 2020

Вот очень простой пример, демонстрирующий dataset.resize() для одного набора данных.

import numpy as np
import h5py

arr = np.random.rand(100).reshape(20,5)

with h5py.File('SO_61487687.h5', mode='a') as h5f:
     h5f.create_dataset('array1',  data=arr, maxshape=(None, 5) )

with h5py.File('SO_61487687.h5', mode='r+') as h5f:
     print ('Before:', h5f['array1'].shape)
     h5f['array1'].resize(10,axis=0)
     print ('After:', h5f['array1'].shape)
     h5f.flush()
...