Преимущества и упрощенное отображение, которое h5py
обеспечивает (через HDF5) для сохраняющихся наборов данных на диске, является исключительным. Я запускаю некоторый анализ набора файлов и сохраняю результат в наборе данных, по одному для каждого файла. В конце этого шага у меня есть набор объектов h5py.Dataset
, которые содержат 2D-массивы. Все массивы имеют одинаковое количество столбцов, но различное количество строк, т. Е. (A, N), (B, N), (C, N) и т. Д.Целевые наборы данных из нескольких файлов/наборов данных HDF5
Теперь я хотел бы получить доступ к этим множественным 2D-массивы в виде массива 2D массива. То есть, я хотел бы читать их по запросу в виде массива формы (A + B + C, N).
С этой целью классы h5py.Link
не помогают, поскольку они работают на уровне узлов HDF5.
Вот некоторый псевдокод:
import numpy as np
import h5py
a = h5py.Dataset('a',data=np.random.random((100, 50)))
b = h5py.Dataset('b',data=np.random.random((300, 50)))
c = h5py.Dataset('c',data=np.random.random((253, 50)))
# I want to view these arrays as a single array
combined = magic_array_linker([a,b,c], axis=1)
assert combined.shape == (100+300+253, 50)
Для моих целей, предложения от копирования массивов в новый файл не работает. Я также открыт для решения этого вопроса на уровне numpy, но я не нашел подходящих вариантов с numpy.view
или numpy.concatenate
, которые будут работать без копирования данных.
Кто-нибудь знает способ просмотра нескольких массивов в виде сложного набора массивов без копирования и от h5py.Dataset
?
Объясните больше того, что вы пытаетесь сделать с этими данными («читать по требованию»), и почему нечеткое сцепление (самое очевидное решение) неверно. – hpaulj
Есть ли веская причина не хранить все ваши данные в одном 2D 'Dataset', а затем обращаться к отдельным подмассивам с помощью индексации срезов? –
@ali_m, анализ индивидуальных наборов данных генерируется на основе инкрементного анализа, а иногда создаются новые наборы данных. Если бы мне пришлось конкатенировать и хранить все наборы данных, тогда я должен был бы делать это каждый раз, когда новый набор данных будет создан или изменен. И они могут часто меняться. Кроме того, чтение из отдельных файлов позволяет легко отфильтровать или выбрать наборы данных. Я был бы признателен за понимание того, как сгруппировать наборы данных. – achennu