У меня есть файл hdf5, который содержит наборы данных внутри групп. Пример:
group1/dataset1
group1/dataset2
group1/datasetX
group2/dataset1
group2/dataset2
group2/datasetX
Я могу прочитать каждый набор данных независимо. Вот как я читаю набор данных из файла .hdf5:
def hdf5_load_dataset(hdf5_filename, dsetname):
with h5py.File(hdf5_filename, 'r') as f:
dset = f[dsetname]
return dset[...]
# pseudo-code of how I call the hdf5_load_dataset() function
group = {'group1':'dataset1', 'group1':'dataset2' ...}
for group in groups:
for dataset in groups[group]:
dset_value = hdf5_load_dataset_value(path_hdf5_file, f'{group}/{dataset}')
# do stuff
Я хотел бы знать, возможно ли загрузить в память все наборы данных группы 1, затем группы 2, и так далее c как словарь или аналог в одном файле читать. Мой сценарий занимает довольно много времени (4 минуты), чтобы прочитать ~ 200 тыс. Наборов данных. Есть 2k групп с 100 наборами данных. Поэтому, если я загружу группу в память сразу, она не будет перегружена, и я увеличу скорость.
Это псевдокод того, что я ищу:
for group in groups:
dset_group_as_dict = hdf5_load_group(path_hdf5_file, f'{group}')
for dataset in dset_group_as_dict;
#do stuff
РЕДАКТИРОВАТЬ:
Внутри каждого файла .csv:
time, amplitude
1.000e-08, -1.432e-07
1.001e-08, 7.992e-07
1.003e-08, -1.838e-05
1.003e-08, 2.521e-05
Для каждого файла .csv в каждой папке у меня есть набор данных для time
и для amplitude
. Структура hdfile выглядит следующим образом:
XY_1/impact_X/time
XY_1/impact_Y/amplitude
, где
time = np.array([1.000e-08, 1.001e-08, 1.003e-08, ...]) # 500 items
amplitude = np.array([-1.432e-07, 7.992e-07, -1.838e-05, ...]) # 500 items
XY_1
- это позиция в пространстве.
impact_X
означает, что X
было затронуто в положении XY_1, поэтому амплитуда X
изменилась.
Итак, XY_1
должен быть в другой группе XY_2
, а также impact_X
, impact_Y
et c с они представляют данные для конкретной позиции XY.
Мне нужно создать графики из каждой или только одной пары (время, амплитуда) (настраивается). Мне также нужно сравнить амплитуды с «золотым» массивом, чтобы увидеть различия и рассчитать другие вещи. Для выполнения вычислений я прочитаю все наборы данных, выполню расчеты и сохраню результат.
У меня более 200 тыс. Файлов .csv для каждого теста, в общей сложности более 5 млн. Использование 5M чтения с диска в этом случае займет довольно много времени. Для файлов 200k, экспортируя все .csv в уникальный файл JSON, требуется ~ 40 секунд для выполнения, с использованием .csv требуется ~ 4 минуты. Я не могу больше использовать уникальный json из-за проблем с памятью при загрузке одного файла JSON. Вот почему я выбрал hdf5 в качестве альтернативы.
РЕДАКТИРОВАТЬ 2:
Как я читаю файл CSV:
def read_csv_return_list_of_rows(csv_file, _delimiter):
csv_file_list = list()
with open(csv_file, 'r') as f_read:
csv_reader = csv.reader(f_read, delimiter = _delimiter)
for row in csv_reader:
csv_file_list.append(row)
return csv_file_list