《Python数据分析基础教程:Numpy学习指南》- 速记 - 第六章

6.2 计算逆矩阵(略)

6.3 求解线性方程

A = np.mat("1 -2 1;0 2 -8;-4 5 9")
b = np.array([0, 8, -9])
x = np.linalg.solve(A, b)

6.6 求解特征值和特征向量(略)

6.8 分解矩阵(略)

6.10 计算广义逆矩阵(略)

6.12 计算矩阵的行列式(略)

6.14 计算傅里叶变换(略)

6.16 移频(略)

6.18 硬币赌博游戏

对一个硬币赌博游戏下8份赌注。每一轮抛9枚硬币,如果少于5枚硬币正面朝上,将损失8份赌注中的1份;否则,将赢得1份赌注。模拟一下赌博的过程,初始资本为1000份赌注。

import numpy as np
from matplotlib.pyplot import plot, show
cash = np.zeros(10000) #将在赌场中玩10000轮硬币赌博游戏。
cash[0] = 1000
outcome = np.random.binomial(9, 0.5, size=len(cash)) #二项式分布
for i in range(1, len(cash)):
    if outcome[i] < 5:
        cash[i] = cash[i - 1] - 1
    elif outcome[i] < 10:
        cash[i] = cash[i - 1] + 1
    else:
        raise AssertionError("Unexpected outcome " + outcome)

print outcome.min(), outcome.max()
plot(np.arange(len(cash)), cash)
show() #剩余资本呈随机游走(random walk)状态

6.20 模拟游戏秀节目

超几何分布(hypergeometric distribution)是一种离散概率分布,它描述的是一个罐子里有两种物件,无放回地从中抽取指定数量的物件后,抽出指定种类物件的数量。

设想有这样一个游戏秀节目,每当参赛者回答对一个问题,他们可以从一个罐子里摸出3个球并放回。罐子里有一个“倒霉球”,一旦这个球被摸出,参赛者会被扣去6分。而如果他们摸出的3个球全部来自其余的25个普通球,那么可以得到1分。因此,如果一共有100道问题被正确回答,得分情况会是怎样的呢?

(1) 使用hypergeometric函数初始化游戏的结果矩阵。该函数的第一个参数为罐中普通球的数量,第二个参数为“倒霉球”的数量,第三个参数为每次采样(摸球)的数量。

points = np.zeros(100)
outcomes = np.random.hypergeometric(25, 1, 3, size=len(points))

(2) 根据上一步产生的游戏结果计算相应的得分。

for i in range(len(points)):
    if outcomes[i] == 3:
        points[i] = points[i - 1] + 1
    elif outcomes[i] == 2:
        points[i] = points[i - 1] - 6
    else:
        print outcomes[i]

(3) 使用Matplotlib绘制points数组。

plot(np.arange(len(points)), points)
show()

6.22 正态分布

连续分布可以用PDF(Probability Density Function,概率密度函数)来描述。随机变量落在某一区间内的概率等于概率密度函数在该区间的曲线下方的面积。
(1) 使用NumPy random模块中的normal函数产生指定数量的随机数。
N=10000

normal_values = np.random.normal(size=N)

(2) 绘制分布直方图和理论上的概率密度函数(均值为0、方差为1的正态分布)曲线。使用Matplotlib进行绘图。

dummy, bins, dummy = plt.hist(normal_values, np.sqrt(N), normed=True, lw=1)
sigma = 1
mu = 0
plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) * np.exp( - (bins -mu)**2 / (2 *sigma**2) ),lw=2)
plt.show()

6.24 对数正态分布

对数正态分布(lognormal distribution) 是自然对数服从正态分布的任意随机变量的概率分布。
(1) 使用NumPy random模块中的normal函数产生随机数。

N=10000
lognormal_values = np.random.lognormal(size=N)

(2) 绘制分布直方图和理论上的概率密度函数(均值为0、方差为1)。我们将使用Matplotlib进行绘图。

dummy, bins, dummy = plt.hist(lognormal_values,np.sqrt(N), normed=True, lw=1)
sigma = 1
mu = 0
x = np.linspace(min(bins), max(bins), len(bins))
pdf = np.exp(-(numpy.log(x) - mu)**2 / (2 * sigma**2))/ (x *sigma * np.sqrt(2 * np.pi))
plt.plot(x, pdf,lw=3)
plt.show()

你可能感兴趣的:(numpy,numpy)