Объединение нескольких наборов данных с различными формами из разных файлов hdf5 в один файл hdf5

Я работаю с 2D медицинскими изображениями в Python, хранящихся в нескольких hdf5 файлы с различными формами (например, [30,99,761,761], [20,30,99,761,761] и..) и я хочу объединить их все в трехмерный массив в один файл hdf5 (с формой [n,761,761]). На данный момент я делаю это, читая каждое изображение [761,761] из каждого набора данных каждого файла hdf5, а затем записать изображение в один файл. Этот процесс занимает больше 24 часов, так как вокруг 40000 изображения, и я предполагаю, что это наименее оптимизированное решение. Существует ли более быстрый способ выборочного среза и копирования данных из файлов hdf5 в другой?

Вот код сначала создает файл, который я хочу объединить изображения из других файлов в:

ip_augmented_shape = (((num_rotations)*(1+3+num_translations)*len(addrs)),img.shape[0],img.shape[1])
ip_augmented = h5py.File(ip_augmented_path, mode='w')
ip_augmented.create_dataset("data1", ip_augmented_shape,np.int32)
ip_augmented.create_dataset("Index1",(ip_augmented_shape[0],num_classes), np.float32)
ip["Index1"][...] = labels 

print("Creating the data set \n")
counter = 0
pbar = tqdm(total=ip_augmented_shape[0])

А теперь читайте изображения по одному из каждого файла и записывайте их в целевой файл. Всегда есть индекс для каждого изображения, которое также копируется.

for i in range(ip_rotated_flipped_h_shape[0]):
    for j in range(ip_rotated_flipped_h_shape[1]):
        ip_augmented['data1'][counter] = ip_rotated_flipped_h['images'][i][j]
        ip_augmented['Index1'][counter]= ip_rotated_flipped_h['Index1'][i][j]
        counter = counter+1
        pbar.update(1)

for i in range(ip_rotated_flipped_h_shape[0]):
    for j in range(ip_rotated_flipped_h_shape[1]):
        ip_augmented['data1'][counter] = ip_rotated_flipped_h['images'][i][j]
        ip_augmented['Index1'][counter]= ip_rotated_flipped_h['Index1'][i][j]
        counter = counter+1
        pbar.update(1)

for i in range(ip_rotated_flipped_v1_shape[0]):
    for j in range(ip_rotated_flipped_v1_shape[1]):
        ip_augmented['data1'][counter] = ip_rotated_flipped_v1['images'][i][j]
        ip_augmented['Index1'][counter]= ip_rotated_flipped_v1['Index1'][i][j]
        counter = counter+1
        pbar.update(1)

for i in range(ip_rotated_flipped_v2_shape[0]):
    for j in range(ip_rotated_flipped_v2_shape[1]):
        ip_augmented['data1'][counter] = ip_rotated_flipped_v2['images'][i][j]
        ip_augmented['Index1'][counter]= ip_rotated_flipped_v2['Index1'][i][j]     
        counter = counter+1
        pbar.update(1)

for i in range(ip_rotated_translated_shape[0]):
    for j in range(ip_rotated_translated_shape[1]):
        for k in range(ip_rotated_translated_shape[2]):
            ip_augmented['data1'][counter] = ip_rotated_translated['images'][i][j][k]
            ip_augmented['Index1'][counter]= ip_rotated_translated['Index1'][i][j][k]
            counter = counter+1
            pbar.update(1)

0 ответов

Другие вопросы по тегам