從結(jié)果輸出來看,當前運行的源碼是hello.py,不是你看到的這個。修改方法:先停掉,右上角hello那里,下拉開,有個編輯,選擇simple.py,然后重新運行。
邊壩網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、自適應網(wǎng)站建設等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站從2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)建站。
mass function 質(zhì)量函數(shù)
在單線分光雙星里,兩恒星質(zhì)量比的量度函數(shù)。因為這種雙星系統(tǒng)的軌道傾角是未知,所以,函數(shù)也包含傾角的因素在內(nèi)。
由多普勒效應造成的譜線周期性移動能提供雙星的軌道周期,天文學
家由這個周期就能用天體力學定律計算出所謂“質(zhì)量函數(shù)”。這個函數(shù)含有三個未知量:
兩顆子星的質(zhì)量和軌道面相對于觀測方向的傾角。
要再往前走,就不得不作一些近似。按照光學子星的“光譜型”和光
度可以得出它的其他物理參量:質(zhì)量、半徑,以及演化階段。但是,這種稱量恒星的方
法只是依據(jù)其光譜型,會導致很大程度的不確定性。
另一個未知量,即軌道面相對于觀測方向的傾角,通常是很難確定的,除非是有掩
食現(xiàn)象的雙星系統(tǒng),這時才能對傾角限定一個范圍(有無掩食表明我們是在從“側(cè)面”
還是從“上面”來看這個系統(tǒng))。
雖然不能像枚舉那樣使用命名參數(shù),但是可以通過namedtuple混音:
from collections import namedtuple
from enum import Enum
Body = namedtuple("Body", ["mass", "radius"])
class Planet(Body, Enum):
MERCURY = Body(mass=3.303e+23, radius=2.4397e6)
VENUS = Body(mass=4.869e+24, radius=6.0518e6)
EARTH = Body(mass=5.976e+24, radius=3.3972e6)
# ... etc.
你不必寫一個__init__方法。
示例使用:
Planet.MERCURY
Planet.MERCURY: Body(mass=3.303e+23, radius=2439700.0)
Planet.EARTH.mass
5.976e+24
Planet.VENUS.radius
6051800.0
Python – 伯樂在線
首頁所有文章觀點與動態(tài)基礎知識系列教程實踐項目工具與框架工具資源Python小組伯樂在線 Python - 伯樂在線 所有文章 實踐項目 如何在Python中實現(xiàn)這五類強大的概率分布如何在Python中實現(xiàn)這五類強大的概率分布
2015/04/25 · 實踐項目 · 概率分布
分享到: 12
本文由 伯樂在線 - feigao.me 翻譯,Daetalus 校稿。未經(jīng)許可,禁止轉(zhuǎn)載!
英文出處:。歡迎加入翻譯組。
R編程語言已經(jīng)成為統(tǒng)計分析中的事實標準。但在這篇文章中,我將告訴你在Python中實現(xiàn)統(tǒng)計學概念會是如此容易。我要使用Python實現(xiàn)一些離散和連續(xù)的概率分布。雖然我不會討論這些分布的數(shù)學細節(jié),但我會以鏈接的方式給你一些學習這些統(tǒng)計學概念的好資料。在討論這些概率分布之前,我想簡單說說什么是隨機變量(random variable)。隨機變量是對一次試驗結(jié)果的量化。
舉個例子,一個表示拋硬幣結(jié)果的隨機變量可以表示成Python
X = {1 如果正面朝上,
2 如果反面朝上}
12X = {1 如果正面朝上,
2 如果反面朝上}
隨機變量是一個變量,它取值于一組可能的值(離散或連續(xù)的),并服從某種隨機性。隨機變量的每個可能取值的都與一個概率相關聯(lián)。隨機變量的所有可能取值和與之相關聯(lián)的概率就被稱為概率分布(probability distributrion)。
我鼓勵大家仔細研究一下scipy.stats模塊。
概率分布有兩種類型:離散(discrete)概率分布和連續(xù)(continuous)概率分布。
離散概率分布也稱為概率質(zhì)量函數(shù)(probability mass function)。離散概率分布的例子有伯努利分布(Bernoulli distribution)、二項分布(binomial distribution)、泊松分布(Poisson distribution)和幾何分布(geometric distribution)等。
連續(xù)概率分布也稱為概率密度函數(shù)(probability density function),它們是具有連續(xù)取值(例如一條實線上的值)的函數(shù)。正態(tài)分布(normal distribution)、指數(shù)分布(exponential distribution)和β分布(beta distribution)等都屬于連續(xù)概率分布。
若想了解更多關于離散和連續(xù)隨機變量的知識,你可以觀看可汗學院關于概率分布的視頻。
二項分布(Binomial Distribution)
服從二項分布的隨機變量X表示在n個獨立的是/非試驗中成功的次數(shù),其中每次試驗的成功概率為p。
E(X) = np, Var(X) = np(1?p)
如果你想知道每個函數(shù)的原理,你可以在IPython筆記本中使用help file命令。 E(X)表示分布的期望或平均值。
鍵入stats.binom?了解二項分布函數(shù)binom的更多信息。
二項分布的例子:拋擲10次硬幣,恰好兩次正面朝上的概率是多少?
假設在該試驗中正面朝上的概率為0.3,這意味著平均來說,我們可以期待有3次是硬幣正面朝上的。我定義擲硬幣的所有可能結(jié)果為k = np.arange(0,11):你可能觀測到0次正面朝上、1次正面朝上,一直到10次正面朝上。我使用stats.binom.pmf計算每次觀測的概率質(zhì)量函數(shù)。它返回一個含有11個元素的列表(list),這些元素表示與每個觀測相關聯(lián)的概率值。
您可以使用.rvs函數(shù)模擬一個二項隨機變量,其中參數(shù)size指定你要進行模擬的次數(shù)。我讓Python返回10000個參數(shù)為n和p的二項式隨機變量。我將輸出這些隨機變量的平均值和標準差,然后畫出所有的隨機變量的直方圖。
泊松分布(Poisson Distribution)
一個服從泊松分布的隨機變量X,表示在具有比率參數(shù)(rate parameter)λ的一段固定時間間隔內(nèi),事件發(fā)生的次數(shù)。參數(shù)λ告訴你該事件發(fā)生的比率。隨機變量X的平均值和方差都是λ。
E(X) = λ, Var(X) = λ
泊松分布的例子:已知某路口發(fā)生事故的比率是每天2次,那么在此處一天內(nèi)發(fā)生4次事故的概率是多少?
讓我們考慮這個平均每天發(fā)生2起事故的例子。泊松分布的實現(xiàn)和二項分布有些類似,在泊松分布中我們需要指定比率參數(shù)。泊松分布的輸出是一個數(shù)列,包含了發(fā)生0次、1次、2次,直到10次事故的概率。我用結(jié)果生成了以下圖片。
你可以看到,事故次數(shù)的峰值在均值附近。平均來說,你可以預計事件發(fā)生的次數(shù)為λ。嘗試不同的λ和n的值,然后看看分布的形狀是怎么變化的。
現(xiàn)在我來模擬1000個服從泊松分布的隨機變量。
正態(tài)分布(Normal Distribution)
正態(tài)分布是一種連續(xù)分布,其函數(shù)可以在實線上的任何地方取值。正態(tài)分布由兩個參數(shù)描述:分布的平均值μ和方差σ2 。
E(X) = μ, Var(X) = σ2
正態(tài)分布的取值可以從負無窮到正無窮。你可以注意到,我用stats.norm.pdf得到正態(tài)分布的概率密度函數(shù)。
β分布(Beta Distribution)
β分布是一個取值在 [0, 1] 之間的連續(xù)分布,它由兩個形態(tài)參數(shù)α和β的取值所刻畫。
β分布的形狀取決于α和β的值。貝葉斯分析中大量使用了β分布。
當你將參數(shù)α和β都設置為1時,該分布又被稱為均勻分布(uniform distribution)。嘗試不同的α和β取值,看看分布的形狀是如何變化的。
指數(shù)分布(Exponential Distribution)
指數(shù)分布是一種連續(xù)概率分布,用于表示獨立隨機事件發(fā)生的時間間隔。比如旅客進入機場的時間間隔、打進客服中心電話的時間間隔、中文維基百科新條目出現(xiàn)的時間間隔等等。
我將參數(shù)λ設置為0.5,并將x的取值范圍設置為 $[0, 15]$ 。
接著,我在指數(shù)分布下模擬1000個隨機變量。scale參數(shù)表示λ的倒數(shù)。函數(shù)np.std中,參數(shù)ddof等于標準偏差除以 $n-1$ 的值。
結(jié)語(Conclusion)
概率分布就像蓋房子的藍圖,而隨機變量是對試驗事件的總結(jié)。我建議你去看看哈佛大學數(shù)據(jù)科學課程的講座,Joe Blitzstein教授給了一份摘要,包含了你所需要了解的關于統(tǒng)計模型和分布的全部。
我覺得參數(shù),也百叫參變量,是一個變量。我們在研究當前問題的時候,關心某幾個變量的變化以及它們之間的相互關系,其中度有一個或一些叫自變量,另一個或另一些叫因變量。參數(shù)就是用來代替一個數(shù)的未知數(shù) 比如你定義時間,用t做參數(shù) 當你要計算路程vt(其中v設為常量),當要算一段時間的路程,只要用這個公式,再帶入一個t的值就可以了。 總之,參數(shù)就是一個符號,沒有實際意義,要讓他有實際意義,就給參數(shù)附一個值就可以了 形參就是沒有實際意義的參數(shù) 比如上面的t 實參就是有實際意義的參數(shù) 比如把上面的t賦值的那個常量 二維數(shù)組就是既有行又有列的。
比如:你的程序為Untitled1.exe
打開命令提示符:
轉(zhuǎn)到你的Untitled1.exe的目錄,
輸入下列命令:
Untitled1.exe a basdfsa 1314324 -k -f
回車就可以運行了。
這時,在Main函數(shù)里定義的
int main(int argc, char *args[])
里的argc = 6,就是表示有六個參數(shù),
對應的
args[0] = "Untitled1.exe";
args[1] = "a";
args[2] = "basdfsa";
args[3] = "1314324";
args[4] = "-k";
args[5] = "-f";
函數(shù)調(diào)用時需注意的東西。函數(shù)定義中函數(shù)首部中的參數(shù)叫形參,調(diào)用函數(shù)時使用的參數(shù)叫實參。C函數(shù)調(diào)用采用“值傳遞”,比如有函數(shù):
int max(int x,int y)
{if(xy)
return x;
return y;
}
在調(diào)用該函數(shù)時,有max(a,b);則該調(diào)用只把a(實參)的值賦給x(形參),把b(實參)的值賦給y(形參)。函數(shù)中對x,y的任何動作不改變a,b的值。值得注意的是如果用指針作參數(shù),雖然符合上面原則,但對形參指向的數(shù)據(jù)的更改會影響實參指向數(shù)據(jù)的值。如函數(shù):
int swap(int *x.int *y)/*交換*/
{int temp=*x;
*x=*y;
*y=temp;
}
則調(diào)用后swap第一個實參指向數(shù)據(jù)變?yōu)樵诙€實參指向的數(shù)據(jù),原第二個實參指向的數(shù)據(jù)變?yōu)榈谝粋€實參指向數(shù)據(jù)(因為指針的值是其指向數(shù)據(jù)的地址,該形參和實參指向同一個內(nèi)存地址,形參對該地址存儲值的改變,當然會影響到實參指向的地址存儲值),但兩指針指向(指向為其值)不變(上面的原則)。
Shape Parameters
形態(tài)參數(shù)
While a general continuous random variable can be shifted and scaled
with the loc and scale parameters, some distributions require additional
shape parameters. For instance, the gamma distribution, with density
γ(x,a)=λ(λx)a?1Γ(a)e?λx,
requires the shape parameter a. Observe that setting λ can be obtained by setting the scale keyword to 1/λ.
雖然一個一般的連續(xù)隨機變量可以被位移和伸縮通過loc和scale參數(shù),但一些分布還需要額外的形態(tài)參數(shù)。作為例子,看到這個伽馬分布,這是它的密度函數(shù)
γ(x,a)=λ(λx)a?1Γ(a)e?λx,
要求一個形態(tài)參數(shù)a。注意到λ的設置可以通過設置scale關鍵字為1/λ進行。
Let’s check the number and name of the shape parameters of the gamma
distribution. (We know from the above that this should be 1.)
讓我們檢查伽馬分布的形態(tài)參數(shù)的名字的數(shù)量。(我們知道從上面知道其應該為1)
from scipy.stats import gamma
gamma.numargs
1
gamma.shapes
'a'
Now we set the value of the shape variable to 1 to obtain the
exponential distribution, so that we compare easily whether we get the
results we expect.
現(xiàn)在我們設置形態(tài)變量的值為1以變成指數(shù)分布。所以我們可以容易的比較是否得到了我們所期望的結(jié)果。
gamma(1, scale=2.).stats(moments="mv")
(array(2.0), array(4.0))
Notice that we can also specify shape parameters as keywords:
注意我們也可以以關鍵字的方式指定形態(tài)參數(shù):
gamma(a=1, scale=2.).stats(moments="mv")
(array(2.0), array(4.0))
Freezing a Distribution
凍結(jié)分布
Passing the loc and scale keywords time and again can become quite
bothersome. The concept of freezing a RV is used to solve such problems.
不斷地傳遞loc與scale關鍵字最終會讓人厭煩。而凍結(jié)RV的概念被用來解決這個問題。
rv = gamma(1, scale=2.)
By using rv we no longer have to include the scale or the shape
parameters anymore. Thus, distributions can be used in one of two ways,
either by passing all distribution parameters to each method call (such
as we did earlier) or by freezing the parameters for the instance of the
distribution. Let us check this:
通過使用rv我們不用再更多的包含scale與形態(tài)參數(shù)在任何情況下。顯然,分布可以被多種方式使用,我們可以通過傳遞所有分布參數(shù)給對方法的每次調(diào)用(像我們之前做的那樣)或者可以對一個分布對象凍結(jié)參數(shù)。讓我們看看是怎么回事:
rv.mean(), rv.std()
(2.0, 2.0)
This is indeed what we should get.
這正是我們應該得到的。
Broadcasting
廣播
The basic methods pdf and so on satisfy the usual numpy broadcasting
rules. For example, we can calculate the critical values for the upper
tail of the t distribution for different probabilites and degrees of
freedom.
像pdf這樣的簡單方法滿足numpy的廣播規(guī)則。作為例子,我們可以計算t分布的右尾分布的臨界值對于不同的概率值以及自由度。
stats.t.isf([0.1, 0.05, 0.01], [[10], [11]])
array([[ 1.37218364, 1.81246112, 2.76376946],
[ 1.36343032, 1.79588482, 2.71807918]])
Here, the first row are the critical values for 10 degrees of freedom
and the second row for 11 degrees of freedom (d.o.f.). Thus, the
broadcasting rules give the same result of calling isf twice:
這里,第一行是以10自由度的臨界值,而第二行是以11為自由度的臨界值。所以,廣播規(guī)則與下面調(diào)用了兩次isf產(chǎn)生的結(jié)果相同。
stats.t.isf([0.1, 0.05, 0.01], 10)
array([ 1.37218364, 1.81246112, 2.76376946])
stats.t.isf([0.1, 0.05, 0.01], 11)
array([ 1.36343032, 1.79588482, 2.71807918])
If the array with probabilities, i.e, [0.1, 0.05, 0.01] and the array of
degrees of freedom i.e., [10, 11, 12], have the same array shape, then
element wise matching is used. As an example, we can obtain the 10% tail
for 10 d.o.f., the 5% tail for 11 d.o.f. and the 1% tail for 12 d.o.f.
by calling
但是如果概率數(shù)組,如[0.1,0.05,0.01]與自由度數(shù)組,如[10,11,12]具有相同的數(shù)組形態(tài),則元素對應捕捉被作用,我們可以分別得到10%,5%,1%尾的臨界值對于10,11,12的自由度。
stats.t.isf([0.1, 0.05, 0.01], [10, 11, 12])
array([ 1.37218364, 1.79588482, 2.68099799])
Specific Points for Discrete Distributions
離散分布的特殊之處
Discrete distribution have mostly the same basic methods as the
continuous distributions. However pdf is replaced the probability mass
function pmf, no estimation methods, such as fit, are available, and
scale is not a valid keyword parameter. The location parameter, keyword
loc can still be used to shift the distribution.
離散分布的簡單方法大多數(shù)與連續(xù)分布很類似。當然像pdf被更換為密度函數(shù)pmf,沒有估計方法,像fit是可用的。而scale不是一個合法的關鍵字參數(shù)。Location參數(shù),關鍵字loc則仍然可以使用用于位移。
The computation of the cdf requires some extra attention. In the case of
continuous distribution the cumulative distribution function is in most
standard cases strictly monotonic increasing in the bounds (a,b) and
has therefore a unique inverse. The cdf of a discrete distribution,
however, is a step function, hence the inverse cdf, i.e., the percent
point function, requires a different definition:
ppf(q) = min{x : cdf(x) = q, x integer}
Cdf的計算要求一些額外的關注。在連續(xù)分布的情況下,累積分布函數(shù)在大多數(shù)標準情況下是嚴格遞增的,所以有唯一的逆。而cdf在離散分布,無論如何,是階躍函數(shù),所以cdf的逆,分位點函數(shù),要求一個不同的定義:
ppf(q) = min{x : cdf(x) = q, x integer}
For further info, see the docs here.
為了更多信息可以看這里。
We can look at the hypergeometric distribution as an example
from scipy.stats import hypergeom
[M, n, N] = [20, 7, 12]
我們可以看這個超幾何分布的例子
from scipy.stats import hypergeom
[M, n, N] = [20, 7, 12]
If we use the cdf at some integer points and then evaluate the ppf at
those cdf values, we get the initial integers back, for example
如果我們使用在一些整數(shù)點使用cdf,它們的cdf值再作用ppf會回到開始的值。
x = np.arange(4)*2
x
array([0, 2, 4, 6])
prb = hypergeom.cdf(x, M, n, N)
prb
array([ 0.0001031991744066, 0.0521155830753351, 0.6083591331269301,
0.9897832817337386])
hypergeom.ppf(prb, M, n, N)
array([ 0., 2., 4., 6.])
If we use values that are not at the kinks of the cdf step function, we get the next higher integer back:
如果我們使用的值不是cdf的函數(shù)值,則我們得到一個更高的值。
hypergeom.ppf(prb + 1e-8, M, n, N)
array([ 1., 3., 5., 7.])
hypergeom.ppf(prb - 1e-8, M, n, N)
array([ 0., 2., 4., 6.])
本文標題:mass函數(shù)Python mass函數(shù)Python
文章源于:http://chinadenli.net/article6/hgddog.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站建設、微信公眾號、搜索引擎優(yōu)化、手機網(wǎng)站建設、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)