2014-02-12 83 views
17

我使用Python的numpy.random模塊中的randnnormal函數。這些函數與我在http://docs.scipy.org手冊(他們都涉及高斯分佈)中讀到的內容非常相似,但是我應該注意哪些細微差別?如果是這樣,在什麼情況下我會更好地使用特定功能?randn和普通Python之間的區別

+2

他們似乎不同於我。 '正常':從正態(高斯)分佈中抽取隨機樣本。 'randn':用「標準正態分佈」的數據返回一個隨機矩陣 – hughdbrown

+4

@hughdbrown同樣的分佈,略有不同的使用方式。 –

回答

14

randn似乎給出了一些標準化的正態分佈(均值0和方差1)的分佈。 normal需要更多參數才能獲得更多控制。所以rand似乎只是一個方便的功能

+3

他們最後調用了相同的C函數('rk_gauss')。我認爲'randn'的存在主要是爲了讓MATLAB轉換開心。 MATLAB'randn'似乎或多或少是相同的。 –

+0

啊,他們在什麼文件中定義?我認爲情況確實如此,從源頭上看起來有點不對勁,但我無法找到它。 – M4rtini

+0

'numpy/random/mtrand/distributions.c' –

38

我是一個統計學家有時代碼,而不是反之亦然,所以這是我可以用一些準確的答案。

看着你在你的問題鏈接的文檔,我還是要強調一些關鍵的不同:

正常:

numpy.random.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. 

因此,在這種情況下,你產生GENERIC正態分佈(關於後面的含義的更多細節)。

randn:

numpy.random.randn(d0, d1, ..., dn) 
# Return a sample (or samples) from the 「standard normal」 distribution. 

# Parameters : 
# d0, d1, ..., dn : int, optional -- The dimensions of the returned array, should be all positive. If no argument is given a single Python float is returned. 
# Returns : 
# Z : ndarray or float -- A (d0, d1, ..., dn)-shaped array of floating-point samples from the standard normal distribution, or a single such float if no parameters were supplied. 

在這種情況下,你產生具體正態分佈,標準發佈。


現在的一些數學,這是真正需要得到你的問題的心臟的:

一個正常的分佈是其中的值更可能附近的平均值發生。本質上有一堆這種情況。例如,6月份達拉斯的平均高溫,比方說95°F,一年內可能達到100甚至105個平均值,但更通常的是接近95或97.同樣,它可能達到最低溫度80,但85或90更有可能。

因此,它與統一分配(滾動一個誠實的六面模具)有根本的區別。


標準正態分佈只是一個普通的分佈,其中平均值爲0和方差(用於變化的數學術語)爲1

所以,

numpy.random.normal(size= (10, 10)) 

與寫作完全相同

numpy.random.randn(10, 10) 

,因爲numpy.random.normal的值(loc = 0,scale = 1)默認實際上是標準分佈。

使事情更混亂,因爲numpy random documentation狀態:

sigma * np.random.randn(...) + mu 

相同

np.random.normal(loc= mu, scale= sigma, ...) 

*最後說明一點:我使用的術語方差數學方法描述的變化。有些人說標準偏差。方差簡單地等於標準偏差的平方。由於標準分佈的方差= 1,在這種情況下的標準分佈,variance == standard deviation

+0

您的回答看起來很有趣。但是,如果測量結果是某種東西的速度,如何產生噪音?噪音應該只包含正值。?!如果是這樣的話,正態分佈不能產生正值,對嗎? – Spider

+1

我不確定我在追蹤@Spider。如果我關注你,你也在問價值如何可能低於平均水平。標準差的定義是平均值附近的變化。也就是說,無論是在上面還是下面。沒有足夠的空間進入它,但看看http://en.wikipedia.org/wiki/Standard_deviation或http://en.wikipedia.org/wiki/Normal_distribution –

+0

哦,現在我明白你的意思了:是的,一個「速度」(不是速度,這是一個向量)只能有正數。是的,正態分佈允許負數。因此,正如你的直覺已經告訴你的那樣,速度並不遵循正態分佈。還有許多其他類型的分佈,如泊松或二項式。 –

相關問題