У меня есть список из нескольких больших файлов hdf5, каждый из которых содержит набор данных 4D. Я хотел бы получить их конкатенацию на первой оси, например, массивоподобный объект, который будет использоваться так, как если бы все наборы данных были объединены. Мое окончательное намерение состоит в том, чтобы последовательно читать фрагменты данных по одной и той же оси (например, [0:100,:,:,:]
, [100:200,:,:,:]
,...) несколько раз.
Наборы данных в h5py разделяют значительную часть API массива numpy, что позволяет мне вызывать numpy.concatenate
, чтобы выполнить задание:
files = [h5.File(name, 'r') for name in filenames]
X = np.concatenate([f['data'] for f in files], axis=0)
С другой стороны, структура памяти неодинакова, и память не может быть разделена между ними (связанный вопрос). Увы, concatenate
охотно скопирует все содержимое каждого массивоподобного объекта в новый массив, что я не могу принять в моем случае использования. исходный код функция объединения массивов подтверждает это.
Как я могу получить объединенное представление для нескольких массивоподобных объектов, без жадного считывания их в память? Что касается этого представления, нарезка и индексация этого представления будут вести себя так же, как если бы у меня был конкатенированный массив.
Я могу представить, что написание пользовательской оболочки сработает, но я хотел бы знать, существует ли уже такая реализация в виде библиотеки, или доступно ли другое решение проблемы, столь же осуществимое. Мои поиски пока ничего подобного не дали. Я также готов принять решения, специфичные для h5py.