2015-06-30 10 views
6

Widziałem tego wzorca w czyimś kodzie:Czy wywołanie random.normal na tablicy wartości powoduje dodanie szumu?

import numpy as np 
# Create array 
xx = np.linspace(0.0, 100.0, num=100) 
# Add Noise 
xx = np.random.normal(xx) 

i wydaje się, aby dodać trochę hałasu dla każdej wartości tablicy, ale nie mogę znaleźć żadnej dokumentacji w tej sprawie. Co się dzieje? Co decyduje o właściwościach (czyli skalowaniu) hałasu? Czy daną wartość traktuje się jako średnią (tj. Parametr loc) każdego próbkowania z rozkładu normal?

Byłbym także bardzo ciekawy, dlaczego to zachowanie nie jest objęte dokumentacją.

+0

Działa również dla parametru scale, np. Np.random.normal (loc = np.zeros ((4,4)), scale = np.array (range (1,17)) .reformed ((4, 4))) – Felix

Odpowiedz

8

Nie widzę tego również udokumentowane, ale wiele funkcji numpy, które pobierają ndarray będzie operate on it element-wise. W każdym razie, można łatwo sprawdzić, kiedy przekazując jej tablicę to nazwać numpy.random.normal dla każdego elementu na tablicy przy użyciu wartości tego elementu jako średnią i zwraca tablicę:

In [9]: xx = numpy.array([1, 10, 100, 1000]) 

In [10]: numpy.random.normal(xx) 
Out[10]: 
array([ 9.45865328e-01, 1.11542264e+01, 9.88601302e+01, 
     1.00120448e+03]) 

Wydaje się, że jest za pomocą wartości domyślnej 1.0 dla skali. Możesz to zmienić:

In [12]: numpy.random.normal(xx, 10) 
Out[12]: array([ 8.92500743, -5.66508088, 97.33440273, 1003.37940455]) 

In [13]: numpy.random.normal(xx, 100) 
Out[13]: array([ -75.13092966, -47.0841671 , 154.12913986, 816.3126146 ]) 
1

Jako uzupełnienie powyższych uwag i przykładów, dokumentacja jest tam w mojej implementacji numpy.
w formie skróconej, z dużymi nożyc:

help(np.random.normal) 
    normal(loc=0.0, scale=1.0, size=None)  
    Draw random samples from a normal (Gaussian) distribution. 
    Parameters 
    ---------- 
    loc : float Mean ("centre") of the distribution. 
    scale : float Standard deviation (spread or "width") of the 
        distribution. 
    size : tuple of ints, Output shape. 
      If the given shape is, e.g., ``(m, n, k)``, then 
      ``m * n * k`` samples are drawn. 

Jeśli chcesz produkować szereg wartości danych o określonym kształcie, skupione wokół średniej z określonego odchylenia standardowego, można wykonać następujące czynności.

>>> x = 10 
>>> vals = np.random.normal(x,3.,(10,)) 
>>> vals 
array([ 10.6999745 , 9.58139692, 14.04490407, 9.54797132, 
     10.18378835, 11.42772729, 5.22100578, 9.51757533, 
     12.95314676, 13.77068901]) 

który generuje tablicę 10 wartości, kształt (10) o średniej wartości 10 i rozłożone w zakresie +/- 3 std odchylenia. Dostarczono również rzeczywistą funkcję dystrybucji, odniesienia i próbkę kodu matplotlib. Używam np.przykład.wersji "1.8.0".

Jest to przydatna funkcja, jeśli chcesz wytworzyć próbki punktowe (X, Y) wyśrodkowane wokół wartości średniej ze znanym rozkładem.

Powiązane problemy