Python之数据分析(Numpy的子模块:线性代数模块linalg、傅里叶变换模块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)# 用linalg下的inv求A的逆矩阵B = np.linalg.inv(A)print(B)# 验证是否是逆矩阵C = A * B  # numpy中的运算符号与python相通print(C)

Python之数据分析(Numpy的子模块:线性代数模块linalg、傅里叶变换模块fft)

2、矩阵的线性解

解线性(一次)方程组:solve()或lstsq()
numpy.linalg.solve(A, B)或numpy.linalg.lstsq(A, B)[0]

import numpy as npA = np.mat('1 -2 1; 0 2 -8; -4 5 9')  # 初始矩阵(3x3)B = np.mat('0; 8; -9')  # 列向量X1 = np.linalg.solve(A, B)X2 = np.linalg.lstsq(A, B)[0]print(X1, '\n', X2)

Python之数据分析(Numpy的子模块:线性代数模块linalg、傅里叶变换模块fft)

3、特征值与特征向量

定义: 对于n阶方阵A,如果存在数a和非零n维向量x,使得Ax=ax,则称a是矩阵A的一个特征值,x则是矩阵A特征值a的特征向量(不唯一)
两个都取: numpy.linalg.eig(A)
只取特征值: numpy.linalg.eigvals(A)

import numpy as npA = np.mat('3 -2; 1 0')eigvals, eigvecs = np.linalg.eig(A)  # 用两个对象来接收特征值和特征向量print(eigvals)  # 特征值print(eigvecs)  # 特征向量# 证明特征值正确:Ax=axprint(A * eigvecs[:, 0])  # 取第0列print(eigvals[0] * eigvecs[:, 0])print("------------------只取特征值--------------------")print(np.linalg.eigvals(A))

Python之数据分析(Numpy的子模块:线性代数模块linalg、傅里叶变换模块fft)

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'''奇异值分解'''# M = np.mat('3 5 14; 6 -7 2')# print(M)## U, s, V = np.linalg.svd(M)# S = np.diag(s)  # 以参数数组s作为对角线得到一个矩阵(其余空位补充0)# print(U, S, V, sep='\n')## # 验证,U、V乘上转置应该的单位矩阵# print(U*U.T, V*V.T, sep='\n')'''广义逆矩阵'''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)

Python之数据分析(Numpy的子模块:线性代数模块linalg、傅里叶变换模块fft)

二、傅里叶变换模块(fft)

1、案例:噪音波形模拟降噪

import numpy as npimport numpy.fft as nfimport scipy.io.wavfile as wfimport matplotlib.pylab as mp# 导入数据文件,赋值对象sample_rate, noise_sigs = wf.read("0=数据源/Hawk Zhong is strongest there is.wav")noise_sigs = noise_sigs / 2**15times = 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()  # 过滤之后的fftsfilter_ffts[noised_indices] = 0  # 将噪声的下标都置为0filter_pows = np.abs(filter_ffts)  # 清除噪声后的能量# 将降噪能量映射回时间信号(ifft)filter_sigs = nf.ifft(filter_ffts).real'''1、绘制噪音图像'''# 基本图形参数mp.figure('Filter', facecolor='lightgray')mp.subplot(2, 2, 1)  # 2行2列的1号子图mp.title('Time Domain', fontsize=16)mp.ylabel('Signal', fontsize=12)mp.tick_params(labelsize=10)mp.grid(linestyle=':')# 只取前178个样本mp.plot(times[:178], noise_sigs[:178], c='orangered', label='Noised')mp.legend()'''2、绘制频率图像'''mp.subplot(2, 2, 2)  # 2行2列的1号子图mp.title('Frequency Domain', fontsize=16)mp.ylabel('Power', fontsize=12)mp.tick_params(labelsize=10)mp.grid(linestyle=':')# 只取频率大于0的部分,小于0没有意义mp.plot(freqs[freqs>=0], noised_pows[freqs>=0], c='dodgerblue', label='Noised')mp.legend()'''4、还原时间信号'''mp.subplot(2, 2, 3)  # 2行2列的1号子图mp.xlabel('Time', fontsize=12)mp.ylabel('Signal', fontsize=12)mp.tick_params(labelsize=10)mp.grid(linestyle=':')# 绘制频率图像:只取频率大于0的部分,小于0没有意义mp.plot(times[:178], filter_sigs[:178], c='hotpink', label='Filter')mp.legend()'''3、清除噪声后的 图像'''mp.subplot(2, 2, 4)  # 2行2列的1号子图mp.xlabel('Frequency', fontsize=12)mp.ylabel('Power', fontsize=12)mp.tick_params(labelsize=10)mp.grid(linestyle=':')# 只取频率大于0的部分,小于0没有意义mp.plot(freqs[freqs>=0], filter_pows[freqs>=0], c='limegreen', label='Noised')mp.legend()mp.tight_layout()mp.show()

2、变换效果

Python之数据分析(Numpy的子模块:线性代数模块linalg、傅里叶变换模块fft)

Original: https://blog.51cto.com/u_15738244/5535712
Author: mb62e7593c01ba5
Title: Python之数据分析(Numpy的子模块:线性代数模块linalg、傅里叶变换模块fft)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/504537/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Python数据分析(Numpy和Pandas学习)入门思维导图,果断收藏

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

    Python 2023年8月25日
    092
  • pandas上

    pandas上 1 什么是Pandas 2 Series * (1)Series对象的创建与类型 (2)修改类型 (2)取值 (3)索引 (4)索引和值 (5)unique()的功…

    Python 2023年8月18日
    0134
  • Registration Center

    CAP ●一致性(Consistency):所有节点在同一时间具有相同的数据; ●可用性(Availability) :保证每个请求不管成功或者失败都有响应;某个系统的某个节点挂了…

    Python 2023年11月6日
    098
  • linux命令date

    linux命令date 文章目录 linux命令date * 一、date 二、使用 – (一)结合格式,格式输出数据 (二)结合选项(options) 一、date …

    Python 2023年9月28日
    086
  • VLQ & Base64 VLQ 编码方式的原理及代码实现

    VLQ VLQ (Variable-length quantity)是一种通用的,使用任意位数的二进制来表示一个任意大的数字的一种编码方式。 编码实现: 对数字137进行VLQ编码…

    Python 2023年10月19日
    059
  • Selenium4.0+Python3系列(三) – 常见浏览器操作

    写在前面 上篇文章为大家分享了自动化测试中,常见元素定位的操作。 今天再次读文章,居然忘记了大家特别喜欢的 CSS和 Xpath定位操作分享,这怎么能行呢? 马上安利,感兴趣的同学…

    Python 2023年10月18日
    0102
  • Django ManyToManyField 查询数据 按添加时间排序

    在Django中,ManyToManyField是常用的Field,实现数据库中多对多模型。 例如,人和组之间的关系(一个人可以加入多个组,一个组有多个人): [En] For e…

    Python 2023年5月24日
    0122
  • python制作射击游戏_用python3从零开始开发一款烧脑射击游戏#2

    上回说到用pygame绘制一个静止的小方块,今天将会实现通过鼠标或者键盘来控制小方块的移动 在这之前,首先我们需要考虑一个问题: 我们怎样才会认为一个物体在运动?风动,幡动还是仁者…

    Python 2023年9月22日
    077
  • 关于我用python表白成功这件事【表白成功】

    520,并非情人所属, 我们可以表白万物, 不管什么时候, 这都是一个特别的日子, 今天,我要表白所有, 心里有我的人! 在这个充满幸福的日子里, 我要把最美好的祝福, 送给心里有…

    Python 2023年9月21日
    0150
  • python中的while循环

    1.while循环 """ while 条件: 执行语句1··· 执行语句2·· """ while 1+1 == 2:…

    Python 2023年10月30日
    093
  • “全球推荐产品”国际大奖花落青海穆桂滩

    推荐文章 1024程序员节 | 实体好礼0元送,错过再等1年~推荐原创51CTO博客11天前10000+阅读2点赞6评论1收藏 3步领取,7日到手:发布文章——>等待审核(9…

    Python 2023年10月27日
    0107
  • 【邂逅Django】——(一)创建项目

    🔥 邂逅Django – 目录 ✅ Part 1:【邂逅Django】—— (一)创建项目 🛠️ Part 2:【邂逅Django】—— (二)数据库配置 🛠️ Par…

    Python 2023年11月2日
    088
  • Scrapy各种反反爬机制你都知道吗?

    🌵爬虫之Scrapy系列文章🌴欢迎点赞评论学习交流~🌱各位看官多多关注哦😘~ 目录 🍉内容介绍 🌵Scrapy如何设置请求头? 🌵Scrapy获取数据过快被封ip该如何处理? 🌵S…

    Python 2023年10月1日
    0117
  • Matplotlib自定义图例(多张独立图共享图例)

    1、应用场景 可视化不同方法在各种超参数(或者不同数据集)的性能时,若用多个子图形式可视化,则图太小啦;若每个子图弄成单独的figure,则每个张图都有一个图例显得非常冗余,如图1…

    Python 2023年8月30日
    0124
  • 学自动化测试可以用这几个练手项目

    练手项目的业务逻辑比较简单,只适合练手,不能代替真实项目。 学习自动化测试最难的是没有合适的项目练习。 测试本身既要讲究科学,又有艺术成分,单单学几个 api 的调用很难应付工作中…

    Python 2023年6月11日
    0146
  • Anaconda国内镜像汇总(conda & pip)

    临时切换通道举例: conda install pytorch torchvision -c https://mirrors6.tuna.tsinghua.edu.cn/anaco…

    Python 2023年9月8日
    0103
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球