文章目录
- 一、线性代数模块(linalg)
- 1、矩阵的逆
- 2、矩阵的线性解
- 3、特征值与特征向量
- 4、奇异值分解与广义逆矩阵
- 二、傅里叶变换模块(fft)
一、线性代数模块(linalg)
1、矩阵的逆
矩阵的逆:inv()该逆矩阵的前提必须是方阵
numpy.linalg.inv(A)
import numpy as np
A = np.mat('1 2 3; 5 6 7; 9 8 5')
print(A)
B = np.linalg.inv(A)
print(B)
C = A * B
print(C)
![11](https://img-blog.csdnimg.cn/2020081022391421.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1ZpZXdpbmZpbml0ZWx5,size_16,color_FFFFFF,t_70)
2、矩阵的线性解
解线性(一次)方程组:solve()或lstsq()
numpy.linalg.solve(A, B)或numpy.linalg.lstsq(A, B)[0]
import numpy as np
A = np.mat('1 -2 1; 0 2 -8; -4 5 9')
B = np.mat('0; 8; -9')
X1 = np.linalg.solve(A, B)
X2 = np.linalg.lstsq(A, B)[0]
print(X1, '\n', X2)
![22](https://img-blog.csdnimg.cn/20200810223854796.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1ZpZXdpbmZpbml0ZWx5,size_16,color_FFFFFF,t_70)
3、特征值与特征向量
定义: 对于n阶方阵A,如果存在数a和非零n维向量x,使得Ax=ax,则称a是矩阵A的一个特征值,x则是矩阵A特征值a的特征向量(不唯一)
两个都取: numpy.linalg.eig(A)
只取特征值: numpy.linalg.eigvals(A)
import numpy as np
A = np.mat('3 -2; 1 0')
eigvals, eigvecs = np.linalg.eig(A)
print(eigvals)
print(eigvecs)
print(A * eigvecs[:, 0])
print(eigvals[0] * eigvecs[:, 0])
print("------------------只取特征值--------------------")
print(np.linalg.eigvals(A))
![33](https://img-blog.csdnimg.cn/20200810224023627.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1ZpZXdpbmZpbml0ZWx5,size_16,color_FFFFFF,t_70)
4、奇异值分解与广义逆矩阵
1、正交矩阵: 对于一个满足特定条件的矩阵M,可以被分解为三个矩阵的乘积,M=USV,其中U和V都是正交矩阵(U*U^T=I,某矩阵与其转置相乘等于单位矩阵)
- numpy.linalg.svd(M)
返回U,S主对角线上的元素,V
2、广义逆矩阵
广义逆矩阵:pinv()
numpy.linalg.pinv(A)
3、行列式求解
行列式:det() 求行列式的值前提必须是方阵
numpy.linalg.det(A)
import numpy as np
'''
奇异值分解
'''
'''
广义逆矩阵
'''
A = np.mat('10 11 12 13; 20 21 15 16; 14 15 16 17')
print(A)
B = np.linalg.pinv(A)
print(B)
'''
求行列式的值
'''
B = np.mat('2 1; 3 4')
print(B)
b = np.linalg.det(B)
print(b)
![44](https://img-blog.csdnimg.cn/20200810224321100.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1ZpZXdpbmZpbml0ZWx5,size_16,color_FFFFFF,t_70)
二、傅里叶变换模块(fft)
1、案例:噪音波形模拟降噪
import numpy as np
import numpy.fft as nf
import scipy.io.wavfile as wf
import matplotlib.pylab as mp
sample_rate, noise_sigs = wf.read("0=数据源/Hawk Zhong is strongest there is.wav")
noise_sigs = noise_sigs / 2**15
times = np.arange(len(noise_sigs)) / sample_rate
freqs = nf.fftfreq(times.size, d=1/sample_rate)
noised_ffts = nf.fft(noise_sigs)
noised_pows = np.abs(noised_ffts)
fund_freq = freqs[noised_pows.argmax()]
noised_indices = np.where(np.abs(freqs) != fund_freq)
filter_ffts = noised_ffts.copy()
filter_ffts[noised_indices] = 0
filter_pows = np.abs(filter_ffts)
filter_sigs = nf.ifft(filter_ffts).real
'''
1、绘制噪音图像
'''
mp.figure('Filter', facecolor='lightgray')
mp.subplot(2, 2, 1)
mp.title('Time Domain', fontsize=16)
mp.ylabel('Signal', fontsize=12)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
mp.plot(times[:178], noise_sigs[:178], c='orangered', label='Noised')
mp.legend()
'''
2、绘制频率图像
'''
mp.subplot(2, 2, 2)
mp.title('Frequency Domain', fontsize=16)
mp.ylabel('Power', fontsize=12)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
mp.plot(freqs[freqs>=0], noised_pows[freqs>=0], c='dodgerblue', label='Noised')
mp.legend()
'''
4、还原时间信号
'''
mp.subplot(2, 2, 3)
mp.xlabel('Time', fontsize=12)
mp.ylabel('Signal', fontsize=12)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
mp.plot(times[:178], filter_sigs[:178], c='hotpink', label='Filter')
mp.legend()
'''
3、清除噪声后的 图像
'''
mp.subplot(2, 2, 4)
mp.xlabel('Frequency', fontsize=12)
mp.ylabel('Power', fontsize=12)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
mp.plot(freqs[freqs>=0], filter_pows[freqs>=0], c='limegreen', label='Noised')
mp.legend()
mp.tight_layout()
mp.show()
2、变换效果
![55](https://img-blog.csdnimg.cn/20200810224458196.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1ZpZXdpbmZpbml0ZWx5,size_16,color_FFFFFF,t_70)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)