![](/img/trans.png)
[英]Difference between random draws from scipy.stats…rvs and numpy.random
[英]what is the difference between scipy.stats module and numpy.random module, between similar methods that both modules have?
我在python上查看了一些分發函數:
均勻,二項式,伯努利,正態分布
我發現scipy和numpy都有相同的功能。
>>> from scipy.stats import binom
>>> rv = binom(n, p)
>>> import numpy as np
>>> s = np.random.binomial(n, p, 1000)
仔細檢查代碼,我發現scipy在內部使用了numpy:
https://github.com/scipy/scipy/blob/master/scipy/stats/_discrete_distns.py
https://github.com/numpy/numpy/blob/master/numpy/random/mtrand/distributions.c
那么,我的問題是擁有2份相同分配函數的主要動機是什么?
scipy庫提供了哪些額外的功能,而不是numpy?
每個模塊中的完整方法列表如下:
Numpy Random模塊: https : //docs.scipy.org/doc/numpy/reference/routines.random.html
Scipy stats模塊: https ://docs.scipy.org/doc/scipy/reference/stats.html
我發現了兩個模塊之間的一些基本區別: scipy.stats的隨機抽取之間的差異...... rvs和numpy.random
scipy生成隨機變量,而numpy生成隨機數 。 當您使用np.random.binomial(n, p, 1)
它僅僅是一個實現了隨機變量(的binom(n, p)
在概率和統計中,隨機變量的實現或觀察值是實際觀察到的值(實際發生的情況)。 隨機變量本身就是決定觀察結果的過程。 從實現中計算而不部署統計模型的統計量通常被稱為“經驗”,如經驗分布函數或經驗概率。
一般來說,numpy的作用是多次擲骰子。 另一方面,scipy告訴你連續獲得兩個六的概率是多少。 如果你將硬幣翻轉一百次, 預期的尾巴數量是多少。
當然你可以在numpy中運行模擬並近似這些值(翻轉一百萬次硬幣,尾巴數量約為50萬)。 然而,這只是實驗的結果。 一個隨機變量告訴你理論解決方案(對於二項式,這是n次p ,其中n是試驗次數,p是概率。所以你會得到50萬。
這是一個小小的演示:
import scipy.stats as ss
import numpy as np
n, p = 10**4, 0.3
rv = ss.binom(n, p)
獲得隨機變量的均值和標准差:
rv.mean()
Out: 3000.0
rv.std()
Out: 45.825756949558397
從該分布生成100個隨機數:
prng = np.random.RandomState(0)
random_numbers = prng.binomial(n, p, size=100)
計算平均值和標准差:
random_numbers.mean()
Out: 3004.8099999999999
random_numbers.std()
Out: 47.336813369723146
再產生100個:
prng = np.random.RandomState(1)
random_numbers = prng.binomial(n, p, size=100)
不同的均值和標准差:
random_numbers.mean()
Out: 2990.96
random_numbers.std()
Out: 46.245631145006548
您進一步增加樣本量,均值和標准差將接近分布均值和分布標准差:
random_numbers = prng.binomial(n, p, size=10**7)
random_numbers.mean()
Out: 2999.9639155
random_numbers.std()
Out: 45.854409513250303
scipy庫提供了哪些額外的功能,而不是numpy?
如果您查看其中一個單獨發行版(例如, 測試版 )的文檔,您可以看到其他功能。 numpy函數只允許繪制隨機值。 scipy發行版有許多額外的方法用於其他事物,如百分位數,累積分布函數,以及平均值和標准差等統計數據。
scipy給你的一些信息不能直接從numpy函數中計算出來。 numpy函數僅為您提供隨機繪制的單個值,但scipy以數學方式表示分布,並且可以在不實際繪制任何值的情況下計算某些內容。 例如,scipy分布返回的許多統計數據都是用精確的數學公式計算的。 您可以在鏈接到的源中看到,例如,binom_gen._stats直接計算mean,stdev等。 要使用numpy找到平均值,你必須繪制一堆值(理論上是無限數)並計算它們的平均值; scipy抽象地抽象而不繪制任何值。 scipy發行版揭示了numpy無法獲得的分布的數學細節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.