Scipy ndimage Morphology Operatoren sättigen meinen Computerspeicher RAM (8GB)

Ich muss die morphologische Öffnung für ein 3D-Array mit einer Form (400, 401, 401) und einer Größe von 64320400 Bytes unter Verwendung eines 3D-Strukturelements mit einem Radius von 17 oder mehr berechnen. Die Größe des Strukturelements ndarray beträgt 42875 Bytes. Verwendenscipy.ndimage.morphology.binary_openingVerbraucht der gesamte Prozess 8 GB RAM.

ich habe gelesenscipy/ndimage/morphology.py auf GitHub, und soweit ich das beurteilen kann, ist der Morphologieerosionsoperator in reinem C implementiert. Es ist für mich zu schwierig, das zu verstehenni_morphology.c Daher habe ich keinen Teil dieses Codes gefunden, der zu einer solch enormen Speichernutzung führt. Das Hinzufügen von mehr RAM ist keine praktikable Lösung, da die Speichernutzung mit dem Radius des Strukturelements exponentiell zunehmen kann.

So reproduzieren Sie das Problem:

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)

Dies benötigt ca. 7 GB RAM.

Hat jemand einige Vorschläge, wie man die Morphologie im oben beschriebenen Beispiel berechnet?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage