numpy学习笔记5——常用函数4

import numpy as np

基本符号表示

  1. A − 1 A = E A^{-1} A=E A1A=E A − 1 A^{-1} A1是A的逆矩阵
  2. A T A = E A^T A = E ATA=E 则A是正交矩阵
  3. 存在正交矩阵P,使得 P T A P = B P^T A P = B PTAP=B 则A相似于B
  4. A H = A ‾ T A^H = \overline{A}^T AH=AT A H A^H AH为共轭矩阵
  5. A H = A A^H=A AH=A 则A为Hermit矩阵
  6. A H A = A A H A^HA=AA^H AHA=AAH 则A为正规矩阵
  7. A H A = A A H = E A^HA=AA^H=E AHA=AAH=E 则A为酉矩阵
  8. 若存在酉矩阵P,使得 P H A P = B P^HAP=B PHAP=B则A酉相似于B

求逆矩阵

a = np.mat('0,1,2;1,0,3;4,-3,8')
#求逆
print('逆矩阵')
b = np.linalg.inv(a)
print(b)
print(a*b) #A * A^-1 = E
逆矩阵
[[-4.5  7.  -1.5]
 [-2.   4.  -1. ]
 [ 1.5 -2.   0.5]]
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

解线性方程

A = np.mat('1,-2,1;0,2,8;-4,5,9') #系数矩阵
b = np.array([0, 8, -9])
print(b)
x = np.linalg.solve(A,b) 
print(x)

#验证 看看A*x 是否等于b
b_ = np.dot(A,x) #dot计算点积
print(b_)
[ 0  8 -9]
[6.92 3.52 0.12]
[[-1.11022302e-16  8.00000000e+00 -9.00000000e+00]]

求特征值和特征向量

B = np.mat('-3,-2;1,0')
#求特征值
a = np.linalg.eigvals(B)
print(a)

#eig函数可以同时求特征和特征向量
lambda_1, a_1 = np.linalg.eig(B)
print('特征值')
print(lambda_1)
print('特征向量')
print(a_1)

#验证 利用点积计算B*a是否等于(lambda)*a
print('验证')
for i in range(len(lambda_1)):
    print('向量%d'%i)
    print(np.dot(B, a_1[:,i]))
    print(np.dot(lambda_1[i], a_1[:,i]))
[-2. -1.]
特征值
[-2. -1.]
特征向量
[[-0.89442719  0.70710678]
 [ 0.4472136  -0.70710678]]
验证
向量0
[[ 1.78885438]
 [-0.89442719]]
[[ 1.78885438]
 [-0.89442719]]
向量1
[[-0.70710678]
 [ 0.70710678]]
[[-0.70710678]
 [ 0.70710678]]

奇异值分解

对角化分解

对角化分解是相对于方阵而言(n×n),给定一个方阵,可以将其进行对角分解: A = U Λ U − 1 A=U\Lambda U^{-1} A=UΛU1 其中 Λ \Lambda Λ为对角矩阵,其对角线上的值为A的特征值,U为A的特征值对应的特征向量组成的矩阵。特别的,当A为对称矩阵时,则称为对称对角化分解。
A = ( μ 1 , μ 2 . . . μ m ) [ λ 1 0 ⋯ 0 λ 2 ⋯ ⋮ ⋱ ⋮ 0 ⋯ λ i ] ( μ 1 , μ 2 . . . μ m ) − 1 A = (\mu_1,\mu_2...\mu_m)\begin{bmatrix}\lambda_1 &0 &\cdots \\ 0 & \lambda_2 &\cdots \\ \vdots & \ddots & \vdots \\0 &\cdots &\lambda_i \end{bmatrix} (\mu_1,\mu_2...\mu_m)^{-1} A=(μ1,μ2...μm)λ1000λ2λi(μ1,μ2...μm)1
由于矩形阵无法进行行列式求解,所以矩形阵无法进行特征值分解。为此引入奇异值的概念。若用A表示一个矩形阵,则可以通过 A A H AA^H AAH或者 A H A A^HA AHA将矩形阵变成方阵,从而进行特征值的分解。

奇异值的定义

假设 A ∈ C r m x n ( r > 0 ) A\in{C_r^{mxn}(r>0)} ACrmxn(r>0), A H A A^HA AHA的特征值为:


λ 1 ≥ λ 2 ≥ . . . λ r ≥ λ r + 1 = . . . = λ n = 0 \lambda_1\geq\lambda_2\geq...\lambda_r\geq\lambda_{r+1}=...=\lambda_n=0 λ1λ2...λrλr+1=...=λn=0
则称 σ i = λ i ( i = 1 , 2 , . . . n ) \sigma_i=\sqrt{\lambda_i}(i=1,2,...n) σi=λi (i=1,2,...n)为A的奇异值。特别的0矩阵的奇异值都为0。

奇异值分解的定义

假设 A ∈ C r m × n ( r > 0 ) A\in{C_r^{m×n}(r>0)} ACrm×n(r>0),存在m阶酉矩阵P和n阶酉矩阵Q使得:


A = P ( ∑ 0 0 0 ) Q H A = P\begin{pmatrix}\sum&0\\0&0\end{pmatrix}Q^H A=P(000)QH
其中 ∑ = d i a g ( σ 1 , σ 2 , . . . , σ r ) ; \sum=diag(\sigma_1,\sigma_2,...,\sigma_r); =diag(σ1,σ2,...,σr)其中 σ 1 , σ 2 , . . . , σ r \sigma_1,\sigma_2,...,\sigma_r σ1,σ2,...,σr是矩阵A的所有非零奇异值,则上面的公式称为奇异值分解。


需要注意的是虽然奇异值由A唯一确定,但是酉矩阵P和Q并不唯一,所以奇异值分解不唯一。

奇异值的求解

可以把奇异值分解看作是一种特殊的特征值分解,只不过不是对矩阵A本身进行特征值分解,而是对 A A H AA^H AAH或者 A H A A^HA AHA进行特征值分解。所以奇异值分解过程与进行特征值分解的求解过程是一样的。


A A H AA^H AAH的分解记为 A A H = P Λ 1 P − 1 AA^H=P\Lambda_1 P^{-1} AAH=PΛ1P1 A A H AA^H AAH的分解记为 A H A = Q Λ 2 Q − 1 A^HA=Q\Lambda_2 Q^{-1} AHA=QΛ2Q1,则把矩阵A(m×n)的奇异值分解记为 A = P ∑ Q H A=P\sum Q^H A=PQH,其中P为 A A H AA^H AAH的特征向量(标准向量 维度为m×m)(称为A的左奇异向量), Λ 1 \Lambda_1 Λ1 A A H AA^H AAH的特征值组成的对角矩阵;Q为 A H A A^HA AHA特征向量(标准向量 维度为n×n)(称为A的右奇异向量) Q H Q^H QH为Q的共轭转置, Λ 2 \Lambda_2 Λ2 A H A A^HA AHA的特征值组成的对角矩阵; ∑ \sum 为奇异值矩阵( A H A A^HA AHA的特征值开根号),维度大小为m×n。

举例

( 1 2 0 0 0 0 ) \begin{pmatrix}1&2\\0&0\\0&0\end{pmatrix} 100200的奇异值分解:


计算P:


A A H = ( 1 2 0 0 0 0 ) ( 1 0 0 2 0 0 ) = ( 5 0 0 0 0 0 0 0 0 ) AA^H=\begin{pmatrix}1&2\\0&0\\0&0\end{pmatrix} \begin{pmatrix}1&0&0\\2&0&0\end{pmatrix}=\begin{pmatrix} 5 & 0 & 0 \\ 0 & 0& 0\\ 0 & 0& 0\end{pmatrix} AAH=100200(120000)=500000000
根据 ∣ A A H − λ E ∣ = 0 特 征 值 |AA^H-\lambda{E}|=0特征值 AAHλE=0


∣ 5 − λ 0 0 0 − λ 0 0 0 − λ ∣ = ( 5 − λ ) λ 2 = 0 \begin{vmatrix}5-\lambda&0&0\\0&-\lambda&0\\0&0&-\lambda\end{vmatrix} = (5-\lambda)\lambda^2=0 5λ000λ000λ=(5λ)λ2=0
解的 λ 1 = 5 , λ 2 = 0 , λ 3 = 0 \lambda_1=5,\lambda_2=0,\lambda_3=0 λ1=5,λ2=0,λ3=0


λ = 5 \lambda=5 λ=5时, A A H − λ E = ( 0 0 0 0 − 5 0 0 0 − 5 ) AA^H-\lambda{E}=\begin{pmatrix}0&0&0\\0&-5&0\\0&0&-5\end{pmatrix} AAHλE=000050005可以取特征向量 α 1 = ( 1 , 0 , 0 ) T \alpha_1=(1,0,0)^T α1=(1,0,0)T


λ = 0 \lambda=0 λ=0时, A A H − λ E = ( 5 0 0 0 0 0 0 0 0 ) AA^H-\lambda{E}=\begin{pmatrix}5&0&0\\0&0&0\\0&0&0\end{pmatrix} AAHλE=500000000可以取特征向量 α 2 = ( 0 , 1 , 0 ) T \alpha_2=(0,1,0)^T α2=(0,1,0)T, α 3 = ( 0 , 0 , 1 ) T \alpha_3=(0,0,1)^T α3=(0,0,1)T


所以得到P: Q = ( 1 0 0 0 1 0 0 0 1 ) Q=\begin{pmatrix}1&0&0\\0&1&0\\0&0&1\end{pmatrix} Q=100010001


计算Q:


A H A = ( 1 0 0 2 0 0 ) ( 1 2 0 0 0 0 ) = ( 1 2 2 4 ) A^HA=\begin{pmatrix}1&0&0\\2&0&0\end{pmatrix}\begin{pmatrix}1&2\\0&0\\0&0\end{pmatrix}=\begin{pmatrix}1&2\\2&4\end{pmatrix} AHA=(120000)100200=(1224)
根据 ∣ A H A − λ E ∣ = 0 特 征 值 |A^HA-\lambda{E}|=0特征值 AHAλE=0


∣ 1 − λ 2 2 4 − λ ∣ = λ 2 − 5 λ = 0 \begin{vmatrix}1-\lambda&2\\2&4-\lambda\end{vmatrix} =\lambda^2-5\lambda=0 1λ224λ=λ25λ=0
解的 λ 1 = 5 , λ 2 = 0 \lambda_1=5,\lambda_2=0 λ1=5,λ2=0


λ = 5 \lambda=5 λ=5时, A H A − λ E = ( − 4 2 2 − 1 ) A^HA-\lambda{E}=\begin{pmatrix}-4&2\\2&-1\end{pmatrix} AHAλE=(4221)可以取特征向量 α 1 = ( 1 , 2 ) T \alpha_1=(1,2)^T α1=(1,2)T


λ = 0 \lambda=0 λ=0时, A H A − λ E = ( 1 2 2 4 ) A^HA-\lambda{E}=\begin{pmatrix}1&2\\2&4\end{pmatrix} AHAλE=(1224)可以取特征向量 α 2 = ( 2 , − 1 ) T \alpha_2=(2,-1)^T α2=(2,1)T


所以特征向量为 ( 1 2 2 − 1 ) \begin{pmatrix}1&2\\2&-1\end{pmatrix} (1221)


标准化(单位化)后得到Q: Q = ( 1 5 2 5 2 5 − 1 5 ) Q=\begin{pmatrix}\frac{1}{\sqrt{5}}&\frac{2}{\sqrt{5}}\\\frac{2}{\sqrt{5}}&\frac{-1}{\sqrt{5}}\end{pmatrix} Q=(5 15 25 25 1)


A H A A^HA AHA的特征值为5和0所以取( ∑ \sum 为3x2维) ∑ = ( 5 0 0 0 0 0 ) \sum = \begin{pmatrix}\sqrt{5}&0\\0&0\\0&0 \end{pmatrix} =5 00000
所以矩阵A的奇异值分解为


A = P ∑ Q H = ( 1 0 0 0 1 0 0 0 1 ) ( 5 0 0 0 0 0 ) ( 1 5 2 5 2 5 − 1 5 ) H = ( 1 2 0 0 0 0 ) A = P\sum Q^H = \begin{pmatrix}1&0&0\\0&1&0\\0&0&1\end{pmatrix} \begin{pmatrix}\sqrt{5}&0\\0&0\\0&0 \end{pmatrix} \begin{pmatrix}\frac{1}{\sqrt{5}}&\frac{2}{\sqrt{5}}\\\frac{2}{\sqrt{5}}&\frac{-1}{\sqrt{5}}\end{pmatrix}^H= \begin{pmatrix}1&2\\0&0\\0&0\end{pmatrix} A=PQH=1000100015 00000(5 15 25 25 1)H=100200

#奇异值分解
A = np.mat('1,2;0,0;0,0')
P, sigma, QH = np.linalg.svd(A, full_matrices=False)
print('P')
print(P)
print('sigma')
print(sigma)
print('QH')
print(QH) #

#验证
# np.diag函数将值放在矩阵的对角线上
result = P * np.diag(sigma) * QH
print(result)
P
[[1. 0.]
 [0. 1.]
 [0. 0.]]
sigma
[2.23606798 0.        ]
QH
[[ 0.4472136   0.89442719]
 [-0.89442719  0.4472136 ]]
[[1. 2.]
 [0. 0.]
 [0. 0.]]

广义逆矩阵

对于逆矩阵,只有方阵且行列式不为0=才存在逆矩阵。逆矩阵有下列等价说法。

  1. 非奇异矩阵
  2. R=n (秩等于维度)
  3. 行、列线性无关
  4. 行列式不为0
  5. Ax=b 有唯一解
  6. Ax=0 只有0解

把逆矩阵的概念推广到非方阵(矩形阵)就称为广义逆矩阵。特别的,若满足AB=E,但不满足BA=E,则B称为A的右逆矩阵;若满足AB=E,不满足BA=E,则B称为A的左逆矩阵。

A = np.mat('4,11,14;8,7,-2')
B = np.linalg.pinv(A)
print('A')
print(A)
print('B')
print(B)
print('AB')
print(A*B) #近似于E
print('BA')
print(B*A) #不是单位矩阵 
#所以B为A的右逆矩阵
A
[[ 4 11 14]
 [ 8  7 -2]]
B
[[-0.00555556  0.07222222]
 [ 0.02222222  0.04444444]
 [ 0.05555556 -0.05555556]]
AB
[[ 1.00000000e+00 -9.29811783e-16]
 [-1.66533454e-16  1.00000000e+00]]
BA
[[ 0.55555556  0.44444444 -0.22222222]
 [ 0.44444444  0.55555556  0.22222222]
 [-0.22222222  0.22222222  0.88888889]]

行列式

A = np.mat('1,2;3,4')
print(A)
print(np.linalg.det(A))
[[1 2]
 [3 4]]
-2.0000000000000004

快速傅里叶变换

#快速傅里叶变换
t = np.linspace(0,2*np.pi,30) #时间点
y = np.sin(t) #sin函数
fft_y = np.fft.fft(y) #fft变换 sin函数fft为Sa函数
#画图
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(fft_y)

在这里插入图片描述

#傅里叶逆变换
ifft_y = np.fft.ifft(fft_y)
plt.plot(ifft_y)

#验证
differ = np.abs(ifft_y-y)
print(differ)
result = np.all(differ<(10 ** -9)) #判断是否为0(是否相等)
print(result)
[4.67218856e-17 1.59283179e-16 5.79693349e-17 2.35151319e-16
 1.65082502e-16 2.29964417e-16 7.94577140e-18 2.26577977e-16
 2.59179851e-16 1.18265037e-16 3.38773259e-16 1.97918875e-17
 1.13346788e-16 7.16310534e-17 1.14965906e-16 7.65510590e-17
 6.83472337e-17 5.55636646e-18 2.26653345e-16 1.69788022e-16
 1.20123654e-16 1.21532906e-16 8.61705607e-18 1.48286582e-18
 1.85509225e-17 1.14483521e-16 1.49603722e-16 2.10305392e-16
 1.28029386e-16 1.27444483e-16]
True

在这里插入图片描述

# 频移操作
shift_fft = np.fft.fftshift(fft_y)
plt.plot(fft_y) #原傅里叶信号
plt.plot(shift_fft)#频移后(移到图像中间)
ishift_fft = np.fft.ifftshift(shift_fft)
plt.plot(ishift_fft, linewidth=2)#还原(重合了)

在这里插入图片描述

概率分布

二项分布

设事件A发生的次数为X,A发生的概率为p,不发生的概率为q=1-p,则在n次独立重复实验中,事件A恰好发生k次的概率为 P ( X = k ) = C n k p k q n − k P(X=k)=C_n^kp^kq^{n-k} P(X=k)=Cnkpkqnk,并且满足 ( p + q ) n = C n 0 p 0 q n + C n 1 p 1 q n − 1 + . . . + C n n p n q 0 (p+q)^n = C_n^0p^0q^{n}+C_n^1p^1q^{n-1}+...+C_n^np^nq^{0} p+q)n=Cn0p0qn+Cn1p1qn1+...+Cnnpnq0。这样的离散变量X服从二项分布,表示为X~B(n,p)。

#二项分布
length = 10000
cash = np.zeros(length)
outcome = np.random.binomial(9,0.5,size=len(cash)) #n=9,p=0.5 模拟掷硬币 每次掷9枚 掷10000次
print(outcome)
print(max(outcome))
print(min(outcome))
for i in range(1,length):
    if outcome[i]<5: #小于5则为前一个数减一(模拟输一次)
        cash[i] = cash[i-1]-1
    else:#大于等于5则为前一个数加一(模拟赢一次)
        cash[i] = cash[i-1]+1
        
plt.plot(np.arange(len(cash)),cash)
[6 4 5 ... 6 5 3]
9
0

在这里插入图片描述

超几何分布

设总共有N件两类商品,其中一类中有M件,从所有商品中任取n件(n<=N),这n件中含有一类商品数目X是一个离散随机变量,X取m时概率为 P ( X = m ) = C M m C N − M n − m C N n ( 0 ≤ m ≤ l , l = m i n ( n , M ) ) P(X=m)=\frac{C^m_M C_{N-M}^{n-m}}{C^n_N} (0\leq{m}\leq{l},l=min(n,M)) P(X=m)=CNnCMmCNMnm(0ml,l=min(n,M)) 则称为X服从N,M,n的超几何分布。

length = 100
cash = np.zeros(length)
outcome = np.random.hypergeometric(25,1,3,size=len(cash)) #25个一类商品 1个二类商品 每次取3个商品 返回结果为3个商品中是一类商品的个数
print(outcome) #结果只有2或者3,因为只有一个2类商品
print(max(outcome))
print(min(outcome))
for i in range(1,length): 
    if outcome[i]==3: #抽三次都是一类商品 模拟加一分
        cash[i] = cash[i-1]+1
    elif outcome[i]==2:#抽到二类商品(只抽到两个一类商品)
        cash[i] = cash[i-1]-6
        
plt.plot(np.arange(len(cash)),cash)
[3 3 3 3 3 3 2 3 2 3 3 3 2 3 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
 3 3 3 3 3 3 3 3 3 3 3 2 3 2 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
 3 3 3 3 3 2 3 3 2 2 3 2 3 3 2 3 3 3 3 3 3 3 3 3 3 2]
3
2

在这里插入图片描述

正态分布

连续分布可以用概率密度函数(PDF)表示。正态分布的PDF为: f ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 x ∈ R f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}} x\in{R} f(x)=2π σ1e2σ2(xμ)2xR其中 μ ( 数 学 期 望 ) , σ ( 标 准 差 ) \mu(数学期望),\sigma(标准差) μ,σ是参数,且 σ > 0 , − ∞ < μ < + ∞ \sigma>0,-\infty<\mu<+\infty σ>0,<μ<+表示为 x   N ( μ , σ 2 ) x~N(\mu,\sigma^2) x N(μ,σ2)

N = 10000
normal_value = np.random.normal(size=N) 
#画直方图

dummy, bins, dummy = plt.hist(normal_value,int(np.sqrt(N)),density=True,lw=2) 
#输入参数为 数值、条形数、density参数(True表示频率图,默认为频数图、线宽
#输出参数bins为长度为int(np.sqrt(N))的数组


#画连续图
sigma = 1 #标准差为1
mu = 0 #期望为0
plt.plot(bins,(1/(np.sqrt(2*np.pi)*sigma))*np.exp(-(bins-mu)**2/(2*sigma**2)),lw=2)

在这里插入图片描述

对数正态分布

如果X是随机变量,Y=ln(X)服从正态分布,则称为X服从对数正态分布。对数正态分布的PDF为
f ( x ) = { 1 2 π σ x e − 1 2 ( l n ( x ) − μ σ ) 2 , x>0 0 , x<=0 f(x)=\begin{cases}\frac{1}{\sqrt{2\pi}\sigma x}e^{-\frac{1}{2}(\frac{ln(x)-\mu}{\sigma})^2},&\text{x>0}\\0,&\text{x<=0}\end{cases} f(x)={2π σx1e21(σln(x)μ)2,0,x>0x<=0
μ \mu μ σ \sigma σ为参数。对数均值表达式为 E ( x ) = e ( μ + σ 2 2 ) E(x)=e^{(\mu+\frac{\sigma^2}{2})} E(x)=e(μ+2σ2),
对数标注差表达式为 D ( x ) = ( e σ 2 − 1 ) e ( σ 2 + 2 μ ) D(x)=(e^{\sigma^2}-1)e^{(\sigma^2+2\mu)} D(x)=(eσ21)e(σ2+2μ)


对数正态分布存在下列性质:

  1. 正态分布经过指数变换后变为对数正态分布,对数正态分布经过对数变换后变为正态分布
  2. 对数正态总是右偏
  3. 对数正态的均值和方差为参数 μ 、 σ \mu、\sigma μσ的增函数
  4. 给定参数 μ \mu μ,当 σ \sigma σ趋于0时,对数正态分布的均值趋于 e μ , 方 差 趋 于 0 e^{\mu},方差趋于0 eμ,0
  5. T,t是正实数,X是参数为 ( μ , σ ) (\mu,\sigma) (μ,σ)的正态分布,则 Y = γ X t Y = \gamma X^t Y=γXt任是对数正态分布,参数为 ( t μ + l n ( γ ) , t σ ) (t\mu+ln(\gamma),t\sigma) (tμ+ln(γ),tσ)
N = 10000
lognormal_value = np.random.lognormal(size=N) 
#画直方图

dummy, bins, dummy = plt.hist(lognormal_value,int(np.sqrt(N)),density=True,lw=2) 
#输入参数为 数值、条形数、density参数(True表示频率图,默认为频数图、线宽
#输出参数bins为长度为int(np.sqrt(N))的数组

#画连续图
sigma = 1 #标准差为1
mu = 0 #期望为0
x =np.linspace(min(bins),max(bins),len(bins))
pdf = 1/(np.sqrt(2*np.pi)*sigma*x)*np.exp(-1/2*((np.log(x)-mu)/sigma)**2)
plt.plot(x, pdf, lw=2)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值