Los operadores de morfología Scipy ndimage saturan la memoria RAM de mi computadora (8GB)

Necesito calcular la apertura morfológica para una matriz 3D de forma (400,401,401), tamaño 64320400 bytes usando un elemento de estructura 3D con un radio de 17 o mayor. El tamaño del elemento de estructura ndarray es 42875 bytes. Utilizandoscipy.ndimage.morphology.binary_opening, todo el proceso consume 8 GB de RAM.

he leídoscipy/ndimage/morphology.py en GitHub, y por lo que puedo ver, el operador de erosión morfológica está implementado en puro C. Es muy difícil para mí entender elni_morphology.c fuente, así que no he encontrado ninguna parte de este código que conduzca a una utilización de memoria tan enorme. Agregar más RAM no es una solución viable, ya que el uso de memoria puede aumentar exponencialmente con el radio del elemento de estructura.

Para reproducir el 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)

Esto toma aproximadamente 7 GB de RAM.

¿Alguien tiene algunas sugerencias sobre cómo calcular la morfología en el ejemplo descrito anteriormente?

Respuestas a la pregunta(2)

Su respuesta a la pregunta