python概率程式設計tmp

2021-09-01 17:27:04 字數 4504 閱讀 1441

win10安裝anaconda後, 安裝pymc,命令列

conda install -c pymc

安裝matplotlib, 命令列

conda install matplotlib

進入ipython:

import matplotlib.pyplot as plt

import numpy as np

from numpy.random import randn

fig=plt.figure()

ax1=fig.add_subplot(2,2,1)

ax2=fig.add_subplot(2,2,2)

ax3=fig.add_subplot(2,2,3)

ax1.plot([1,2,3,4])

ax2.plot([1,2,3,5])

#ax3.scatter(np.arange(30), np.arange(30)+3*randn(30))

ax3.plot([2,2,3,5])

fig, axes=plt.subplots(2, 2, sharex=true, sharey=true)

for i in range(2):

for j in range(2):

axes[i, j].hist(randn(500), bins=50, color='k', alpha=0.5) #柱狀圖

plt.subplots_adjust(wspace=0, hspace=0)

x=np.linspace(-1,1,5)

y=x+1

plt.xlim((-1,5)) #x座標的範圍,從-1到5

new_ticks = np.linspace(-1,2,5)

plt.xticks(new_ticks) #x座標上標尺只顯示-1到2, 但整個x軸的範圍仍是-1到5

plt.plot(x,y,'ob-')

x = np.random.randn(1000)

y1 = np.random.randn(len(x))

y2 = 1.8 + np.exp(x)

ax1 = plt.subplot(1,2,1)

ax1.scatter(x,y1,color='r',alpha=.3,edgecolors='white',label='no correl')

plt.xlabel('no correlation')

plt.grid(true)

plt.legend()

ax2 = plt.subplot(1,2,2) #顯示在第二幅圖上

ax2.scatter(x,y2,color='g',alpha=.3,edgecolors='gray',label='correl') #alpha透明度 edgecolors邊緣顏色 label圖例(結合legend使用)

plt.xlabel('correlation')

plt.grid(true)

plt.legend() #顯示圖例, 圖例的文字描述是上面label引數指定

plt.show()

x = np.random.randn(1000)

y1 = np.random.randn(len(x))

y2 = 1.8 + np.exp(x)

ax1 = plt.subplot()

#下面三個散點圖都顯示在一幅圖上

ax1.scatter(x,y1,color='r',alpha=.3,edgecolors='white',label='no correl')

ax1.scatter(x,y2,color='g',alpha=.3,edgecolors='gray',label='correl')

ax1.scatter(x,10+x,color='b',alpha=.3,edgecolors='gray',label='dong')

plt.xlabel('x軸')

plt.ylabel('y軸')

plt.grid(true)

plt.legend()

from pylab import *

figure(1, figsize=(6,6))

ax = axes([0.1,0.1,0.8,0.8])

labels ='spring','summer','autumn','winter'

x=[15,30,45,10]

#explode=(0.1,0.2,0.1,0.1)

explode=(0.1,0,0,0)

pie(x, explode=explode, labels=labels, autopct='%1.1f%%', startangle=67) #餅狀圖

title('rainy days by season')

show()

//------------------------------------

import numpy as np

import math

import matplotlib as mpl

import matplotlib.pyplot as plt

from scipy import stats

#設定顯示的字型,否則會亂碼

mpl.rcparams['font.sans-serif'] = [u'simhei'] #黑體,也可以是fangsong/kaiti等電腦上的字型

mpl.rcparams['axes.unicode_minus'] = false #對座標軸上的減號不進行設定,否則會亂碼

mu = 0

sigma = 1

#取51個點,把中間的0包含進去

x = np.linspace(mu - 3 * sigma, mu + 3 * sigma, 51)

#手動計算概率密度值

y = np.exp(-(x - mu) ** 2 / (2 * sigma ** 2)) / (math.sqrt(2 * math.pi) * sigma)

#背景白色

plt.figure(facecolor = 'w')

#'g-'表示綠色實線繪製線條,'ro'表示紅色圈繪製點;linewidth和markersize分別設定線的寬度和點的大小

plt.plot(x, y, 'g-', x, y, 'ro', linewidth = 2 , markersize = 8) #在同乙個圖上繪製線條和點

plt.xlabel('x', fontsize = 15)

plt.ylabel('y', fontsize = 15)

plt.title(u'高斯分布', fontsize = 18)

plt.grid(true)

plt.show()

//------------------------------------

import numpy as np

import math

import matplotlib as mpl

import matplotlib.pyplot as plt

from scipy import stats

mpl.rcparams['font.sans-serif'] = [u'simhei']

mpl.rcparams['axes.unicode_minus'] = false

#產生10000個均勻分布的隨機值(不一定是均勻分布?),每個xi的值都在0~1之間

x = np.random.rand(10000)

plt.subplot(121) #'121'表示共一行兩列,現在繪製第一幅

#bins引數表示橫座標劃分為30個區域,alpha表示透明度

plt.hist(x, bins = 30, color = 'g', alpha = 0.5, label = u'均勻分布')

plt.legend(loc = 'upper right')

plt.grid()

//--------------------------------------

#驗證中心極限定理

t = 1000 #疊加1000次

a = np.zeros(10000)

for i in range(t):

a += np.random.uniform(-5, 5, 10000)

a /= t

plt.subplot(122) #繪製第二幅圖

# normed引數使得概率密度和為1,即面積

his = plt.hist(a, bins = 30, color = 'g', normed = true, alpha = 0.5, label = u'均勻分布疊加')

#his是乙個tuple,當normed為true時,his[0]表示對應的30個概率密度函式值陣列。his[1]表是橫座標邊界陣列

#print 'area: \n', sum(his[0] * np.diff(his[1]))

plt.legend(loc = 'upper right')

plt.grid()

plt.show()

元程式設計(TMP)掃盲

昨晚看 effective c 才知道了元程式設計 tmp 這個東東,今早決定寫個fibonacci數列試試,給自己掃個盲。就我目前了解,總的說來,最大特性就是 就是編譯期通過 開解做執行期的事。比如編譯期數值運算 可極大提高運算速度 編譯期斷言和契約,編譯期型別運算。但是tmp也不是沒缺點 難讀,...

Item 48 TMP程式設計介紹

item 47介紹了乙個advance的例子。如果用typeid的方式,會出現兩個問題。其中之一如下 出錯的原因,在於對advance例項化時,會發現其不支援隨機訪問,而使編譯器無法處理iter d這句話。所以,最後問題的解決要用過載而不是用if語句。這就是tmp程式設計 template meta...

Item 48 TMP程式設計介紹

item 47介紹了乙個advance的例子。如果用typeid的方式,會出現兩個問題。其中之一如下 templatevoid advance itert iter,distt d void main 出錯的原因,在於對advance例項化時,會發現其不支援隨機訪問,而使編譯器無法處理iter d這...