Operadores de morfologia Scipy ndimage saturam minha memória RAM do computador (8 GB)

Preciso calcular a abertura morfológica para uma matriz 3D de forma (400.401.401), tamanho 64320400 bytes usando um elemento de estrutura 3D com um raio de 17 ou superior. O tamanho do elemento da estrutura ndarray é 42875 bytes. Usandoscipy.ndimage.morphology.binary_opening, todo o processo consome 8 GB de RAM.

eu liscipy/ndimage/morphology.py no GitHub, e até onde eu sei, o operador de erosão da morfologia é implementado em C. puro. É muito difícil para mim entender oni_morphology.c fonte, por isso não encontrei nenhuma parte desse código que leve a uma utilização de memória tão grande. Adicionar mais RAM não é uma solução viável, pois o uso da memória pode aumentar exponencialmente com o raio do elemento da estrutura.

Para reproduzir o problema:

import numpy as np
from scipy import ndimage

arr_3D = np.ones((400,401,401),dtype="bool")

str_3D = ndimage.morphology.generate_binary_structure(3,1)
big_str_3D = ndimage.morphology.iterate_structure(str_3D,20)

arr_out_3D = ndimage.morphology.binary_opening(arr_3D, big_str_3D)

Isso leva aproximadamente 7 GB de RAM.

Alguém tem algumas sugestões de como calcular a morfologia no exemplo descrito acima?

questionAnswers(2)

yourAnswerToTheQuestion