簡體   English   中英

scipy.stats模塊和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萬)。 然而,這只是實驗的結果。 一個隨機變量告訴你理論解決方案(對於二項式,這是np ,其中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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM