Я пытаюсь создать список всех перекрывающихся подмассивов равного размера из большего 3D-массива (для сегментации на основе патчей), где каждый подмассив должен быть сплющен (как 1D-вектор), поэтому я могу использовать шаровую дерево в sklearn.neighbours.BallTree.Numpy - создание перекрывающихся 3D-подмассивов в качестве эффективных векторов
Так, например, при изображении 100x100x100, если бы я разбил это на 5x5x5 перекрывающихся патчей (subarrays), у меня было бы 96x96x96 = 884,736 из них.
Однако я не нашел никакого способа сделать это без numpy, выделяя больше памяти для каждого сплющенного/векторизованного подмассива. Кажется, это связано с тем, что каждый подмассив не является непрерывным в памяти.
например. Для изображения 100x100x100, если я хочу, чтобы каждый патч 5x5x5 был 1D-вектором (длиной 125), numpy решает выделить новый массив в памяти для всех 884 736 из них, который затем становится довольно большим, особенно если я хочу работать с более чем одно изображение 100x100x100!
Я бы приветствовал любые решения для преодоления этой проблемы памяти в python/numpy. Я рассматривал возможность создания подкласса объекта numpy.ndarray, который хранит указатель на расположение патча на большем изображении и возвращает данные в виде массива 1D numpy только при вызове (и после этого он снова удаляется, если не используется) но я не встречал достаточно подробностей о подклассе объектов ndarray для этого. Я буду очень разочарован, если единственным решением будет реализовать все на C/C++. Я ценю любую помощь, которая может быть предоставлена, спасибо!
Наличие векторизованных данных изображений также необходимо для использования kdtree в scipy слишком – Zehan