Как сохранить и получить доступ к большему массиву в файл hdf5: Ошибка памяти? - PullRequest
2 голосов
/ 08 марта 2019

Мне нужно сохранить три массива: 40000x2x128x128x128, 40000x128x128x128 и 40000x128x128x128 в один файл hdf5.Я использовал приведенный ниже код, чтобы случайным образом присвоить значение каждому массиву и записать его в файл hdf5.Тем не менее, у меня есть две проблемы:

  1. Массив слишком велик, тогда он будет иметь ошибку памяти.Я не могу запустить все итерации из-за ошибки памяти.Как мы можем это исправить?

  2. Вывод hdf5 слишком большой, около 40 ГБ.Как мы можем загрузить его в оперативную память?Потому что каждый раз я просто случайно выбираю какую-то позицию в массиве для обработки

Это мой код

var_1_h5 = np.zeros((4000 *10, 2, 128,128,128),dtype=np.float32)
var_2_h5 = np.zeros((4000 *10, 128,128,128),dtype=np.float32)
var_3_h5 = np.zeros((4000 *10, 128,128,128),dtype=np.uint8)
for i in range (1, 10):
    for j in range (4000):
        var_1 = np.random.randn(2, 128,128,128) 
        var_2 = np.random.randn(128,128,128)
        var_3 = np.random.randint(128,128,128)
        var_1_h5[j]=var_1
        var_2_h5[j]=var_2
        var_3_h5[j]=var_3
with h5py.File('var.h5', 'w') as f:
    f['var_1'] = var_1_h5
    f['var_2'] = var_2_h5
    f['var_3'] = var_3_h5
...