2016-12-12 6 views
0

Um Testdaten für meinen Anpassungsalgorithmus zu erzeugen, muss ich ein Array von Gaußschen Rauschen erzeugen, dessen Sigma elementweise spezifiziert wird. Eine reinen Python-Implementierung ist wie folgt:Gaußverteilung mit elementweisem Sigma in Numpy/Scipy

from numpy.random import normal 
for i in range(100): 
    for j in range(100): 
     for k in range(100): 
      image[i, j, k] += normal(0, sigmas[i, j, k]) 

Dies wird ein verrauschtes Bild simulieren soll, wobei jedes Pixel eine Wertmessung ist, mit der Varianz angegeben; Für einen vernünftigen Test muss ich Rauschen erzeugen, das mit der Varianz (die ich angegeben habe) kohärent ist.

Diese Implementierung ist zu langsam (ich arbeite mit großen 3D-Arrays), also was ich suche ist eine Möglichkeit, es zu beschleunigen (am wahrscheinlichsten mit vektorisierten Lib-Methoden).

Antwort

3

Die Argumente zu numpy.random.normal können Arrays sein. Übergeben Sie Ihr Array sigmas als das zweite Argument, z.

noise = normal(0, sigmas) 
image += noise 
+0

Vielen Dank, es ist seltsam, es in der Dokumentation nicht explizit angegeben ist (sie sagen, in der Regel 'Array-like') – Jatentaki

+2

oder in der Tat' noisy_image = normal (Bild, Sigma) ' –

+0

@RobertKern Ooh, I so wie das. –

Verwandte Themen