2016-05-10 10 views
1

Verwischen habe ich eine 3D-Matrix, die Ich mag würde zu (Gaussian) verschwimmen. Dies kann ich mit scipy.ndimage.filters.gaussian_filter() tun. Meine Frage ist, was kann ich tun, damit die Pixel an den Kanten verschwommen sind, so dass periodische Randbedingungen eingehalten werden?ein 3D numpy Array mit periodischen Randbedingungen

Was ich damit meine ist, dass, wenn das Element bei a[0,:,:] betrachtet wird, der gemittelte Wert, der diesem Element zugewiesen wird, auch von den Elementen in a[-1,:,:] beeinflusst werden sollte.

Ich habe gedacht, aus dem gleichen Array a mehrfach verketten, so dass ich eine Reihe von Form [[[a,a,a],[a,a,a],[a,a,a]],[[a,a,a],[a,a,a],[a,a,a]],[[a,a,a],[a,a,a],[a,a,a]]] habe, das heißt eine Anordnung, die aus einem 3 x 3-Raster von a s besteht. Ich würde dann das resultierende Array verwischen. Da meine Matrix ziemlich groß ist (200 mal 200 mal 200), versuche ich, dies zu vermeiden. (Ich könnte ein Subarray der resultierenden großen Anordnung betrachten, wo ich genug Rand um a in der Mitte lasse. Jedoch würde das erfordern, die Größe dieses Randes jedes Mal zu bestimmen, wenn ich den Unschärferadius ändere.)

Ist dort ein einfache und effiziente Möglichkeit dies zu tun?

Antwort

3

den Modus Schlüsselwort-Argument auf ‚wrap‘ werden periodische Randbedingungen erzwingen. Der Code würde ungefähr wie folgt aussehen.

result = gaussian_filter(a, sigma = 1., mode='wrap') 

Ersetzen Sie Sigma natürlich mit Ihren tatsächlichen Parameter (n).