Python线性代数傅里叶分析和动态系统模拟分析之一

要点

  1. Python向量数值计算、可视化,线性独立性和子空间。
  2. 了解欧几里德距离、余弦相似度和皮尔逊相关性应用案例:Python数值计算文档相似度
  3. 时间序列和特征检测示例:Python信号处理边缘检测器, K均值示例:随机簇质心分布
  4. Python傅里叶分析应用示例:心电图频谱,消除音频噪音
  5. Python数值计算和可视化矩阵,几何变换及示例:图像特征检测
  6. Python计算矩阵逆计算,正交矩阵和 QR 分解,行缩减,LU 分解和最小二乘法,示例:QR与格拉姆-施密特过程和主成分分析,多变量分析和协同过滤领域最小二乘法,根据天气预测自行车租赁最小二乘法,多项式回归最小二乘法 ,网格搜索查找模型参数最小二乘法

线性代数

以下是线性代数 4 个核心概念的细分、它们的重要性、上下文解释和 Python 代码片段:

向量和矩阵运算

向量和矩阵是处理数据和参数的基础。运算(加法、乘法、转置)使算法计算能够以矢量化(高效)的方式进行。

  • 向量:可以存储数据或参数的一维数组。
  • 矩阵:用于存储数据集或转换数据的二维数组。
import numpy as npvector = np.array([2, 3])
matrix = np.array([[1, 2], [3, 4]])sum_vector_matrix = vector + matrix[0]  # Addition
print(sum_vector_matrix)
product = np.dot(matrix, vector)  # Multiplication
print("product: ",product)transpose = matrix.T  # Transpose
print(transpose)

输出:

[3 5]
product:  [ 8 18]
[[1 3][2 4]]
特征值和特征向量

特征值和特征向量有助于深度学习模型中的降维、主成分分析和系统稳定性分析。

  • 特征向量是非零向量,在应用线性变换时仅按标量因子变化。标量是特征值。
import numpy as np
import matplotlib.pyplot as pltA = np.array([[4, 2], [1, 3]])eigenvalues, eigenvectors = np.linalg.eig(A)print(f'Eigenvalues: {eigenvalues}')
print(f'Eigenvectors: {eigenvectors}')origin = [0], [0]plt.quiver(*origin, eigenvectors[0,0], eigenvectors[1,0], color=['r'], scale=3, scale_units='xy', angles='xy')
plt.quiver(*origin, eigenvectors[0,1], eigenvectors[1,1], color=['b'], scale=3, scale_units='xy', angles='xy')plt.xlim(-3, 3)
plt.ylim(-3, 3)
plt.title('Eigenvectors of A')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.grid()
plt.axhline(y=0, color='k')
plt.axvline(x=0, color='k')
plt.show()

输出:[^f1]

Eigenvalues: [5. 2.]
Eigenvectors: [[ 0.89442719 -0.70710678][ 0.4472136   0.70710678]]
线性变换

线性变换(缩放、旋转)对于机器学习中的数据增强、标准化和数据转换至关重要。

  • 线性变换改变数据的空间和形状,同时保留网格线的直线度和平行度。
import numpy as np
import matplotlib.pyplot as pltmatrix = np.array([[2, 3], [3, 4]])scaling_matrix = np.array([[2, 0], [0, 2]])transformed_matrix = np.dot(matrix, scaling_matrix)plt.scatter(matrix[:,0], matrix[:,1], color="blue", label="Original")
plt.scatter(transformed_matrix[:,0], transformed_matrix[:,1], color="red", label="Transformed")plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Linear Transformation: Scaling')
plt.grid(True)
plt.legend()
plt.axis('equal')
plt.show()

输出:

求解线性系统

求解线性系统有助于找到权重、优化算法以及在机器学习模型中进行预测。

  • 给定 A x = B Ax = B Ax=B,其中 A A A 是矩阵, B B B 是向量,找到满足方程的向量 x x x

例如:
2 x + 3 y = 1 4 x − 5 y = 2 \begin{aligned} & 2 x+3 y=1 \\ & 4 x-5 y=2 \end{aligned} 2x+3y=14x5y=2

import numpy as npA = np.array([[2, 3], [4, -5]])
B = np.array([1, 2])x = np.linalg.solve(A, B)print(f'Solution: x = {x[0]:.2f}, y = {x[1]:.2f}')

输出:

Solution: x = 0.50, y = 0.00

傅里叶分析

傅里叶分析是研究如何将一般函数分解为具有确定频率的三角函数或指数函数。 傅里叶展开有两种类型:

  • 傅立叶级数:如果一个(表现相当良好的)函数是周期性的,那么它可以写成具有特定频率的三角函数或指数函数的离散和。
  • 傅里叶变换:不一定是周期性的(但仍然表现得相当良好)的一般函数可以写成三角函数或指数函数的连续积分,具有可能频率的连续体

傅立叶分析在物理学中如此重要的原因是,控制物理系统的许多(尽管肯定不是全部)微分方程都是线性的,这意味着两个解的和又是一个解。 因此,由于傅立叶分析告诉我们任何函数都可以写成正弦函数,因此我们在求解微分方程时,可以将注意力限制在这些函数上。 然后我们可以从这些特殊的函数中构建任何其他函数。 这是一个非常有用的策略,因为处理正弦函数总是比处理一般函数更容易。

Python傅里叶变换示例

[^f2]傅立叶变换 (FT) 将信号的时域与其频域相关联,其中频域包含有关构成信号的正弦曲线(幅度、频率、相位)的信息。 由于FT是连续变换,离散傅立叶变换(DFT)成为数字世界中适用的变换,它将离散格式的信号信息保存为一组样本,其中采样定理是离散化的严格规则, 信号。 具有 N 个样本的信号 (xn) 的 DFT 由以下等式给出:
X k = ∑ n = 0 N − 1 x n ⋅ e − i 2 π k n / N = ∑ n = 0 N − 1 x n ⋅ [ cos ⁡ ( 2 π k n / N ) − i sin ⁡ ( 2 π k n / N ) ] X_k=\sum_{n=0}^{N-1} x_n \cdot \mathrm{e}^{-\mathrm{i} 2 \pi k n / \mathrm{N}}=\sum_{n=0}^{N-1} x_n \cdot[\cos (2 \pi k n / N)-i \sin (2 \pi k n / N)] Xk=n=0N1xnei2πkn/N=n=0N1xn[cos(2πkn/N)isin(2πkn/N)]
其中:

  • N \mathrm{N} N : 样本数量
  • n \mathrm{n} n : 当前样本
  • k \mathrm{k} k : 当前频率 k ∈ [ 0 , N − 1 ] \mathrm{k} \in[0, \mathrm{~ N}-1] k[0, N1]
  • x n x_n xn:样本 n \mathrm{n} n 处的正弦值
  • X k X_k Xk​:包含幅度和相位信息的 DFT

DFT ( X k X_k Xk​) 的输出是一个复数数组,其中包含频率分量的信息。 使用数学方程对信号应用 DFT 直接需要大量的计算复杂性。 幸运的是,快速傅立叶变换 (FFT) 的开发可以提供更快的 DFT 实现。 FFT 利用了 DFT 输出的对称性。

我们将开始简单地了解本文中使用的每种方法的输入和输出。 首先,我们将导入所需的包。 Numpy 用于处理矩阵和计算。 我们从 scipy.fft 模块(fft、rfft、fftfreq、rfftfreq)导入有助于我们进行傅立叶分析相关计算的方法。 最后,Plotly 和 matplotlib 用于可视化。

import numpy as np
from scipy.fft import fft, rfft
from scipy.fft import fftfreq, rfftfreq
import plotly.graph_objs as go
from plotly.subplots import make_subplots
import matplotlib.pyplot as plt
%matplotlib inline

我们需要信号来尝试我们的代码。 正弦曲线很棒并且适合我们的示例。 在接下来的代码中,我们使用名为 Signal 的类生成正弦信号,您可以按照此要点找到该类,以便随时使用。 我们将使用前一类生成的信号,包含三个正弦曲线 (1, 10, 20) Hz,幅度分别为 (3, 1, 0.5)。 采样率为 200,信号持续时间为 2 秒。

# Generate the three signals using Signal class and its method sine()
signal_1hz = Signal(amplitude=3, frequency=1, sampling_rate=200, duration=2)
sine_1hz = signal_1hz.sine()
signal_20hz = Signal(amplitude=1, frequency=20, sampling_rate=200, duration=2)
sine_20hz = signal_20hz.sine()
signal_10hz = Signal(amplitude=0.5, frequency=10, sampling_rate=200, duration=2)
sine_10hz = signal_10hz.sine()# Sum the three signals to output the signal we want to analyze
signal = sine_1hz + sine_20hz + sine_10hz# Plot the signal
plt.plot(signal_1hz.time_axis, signal, 'b')
plt.xlabel('Time [sec]')
plt.ylabel('Amplitude')
plt.title('Sum of three signals')
plt.show()

可以使用 scipy 包中的 (fft) 计算该信号的傅立叶变换,如下所示

# Apply the FFT on the signal
fourier = fft(signal)# Plot the result (the spectrum |Xk|)
plt.plot(np.abs(fourier))
plt.show()

现在我们已经了解了傅立叶分析中使用的每种方法的输入和输出,让我们开始编写最终代码。 我们将建立一个类(Fourier),让我们对傅里叶变换的使用更加方便、更好用。

现实应用:心电图频谱、消除音频噪音

动态系统模拟分析

参阅一:计算思维
参阅二:亚图跨际

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/709523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

03|索引优化

数据准备 创建联合索引 KEY idx_name_age_position (name,age,position) USING BTREE CREATE TABLE employees (id int(11) NOT NULL AUTO_INCREMENT,name varchar(24) NOT NULL DEFAULT COMMENT 姓名,age int(11) NOT NULL DEFAULT 0 COMMENT 年龄,position varchar(20) NO…

内存操作函数(c语言)

目录 概述1. memcpy函数2.memcpy函数的模拟实现3. memcmp函数4.memcmp函数的模拟实现5. memset函数6.memset函数的模拟实现7. memmove函数8.memmove函数的模拟实现结语 概述 C语言提供了一些非常有用的内存操作函数,其中包括memcpy、memcmp、memset和memmove。这些…

【Android】更改手机主题导致app数据丢失问题

情景:在使用app过程中更改系统主题(比如从浅色主题改为深色主题),这时activity销毁重建了(即走了onPause、onStop、onSaveInstanceState、onDestroy、onCreate、onRestoreInstanceState、onStart、onResume的生命周期&…

用Python实现绘画樱花树

下面这段代码使用了Python的turtle模块来绘制一个类似于樱花的图案。具体来说,它定义了两个函数:Tree和Petal,并使用这两个函数来绘制图案。 Tree函数: 这个函数递归地绘制了樱花的躯干。它接受两个参数:branch&#x…

MQTT简介

https://mqtt.org/ MQTT(Message Queuing Telemetry Transport) 一种轻量级的,基于发布订阅模式的通信协议,用于在物联网和机器与机器(M2M)通信中传输消息。 它具有低带宽和低功耗的特点,适用于…

Dockerfile制作镜像

Dockerfile制作镜像 Dockerfile介绍 dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 dockerfile仅仅是用来制作镜像的源码文件,是构建容器过程中的指令,docker能够读取dockerfile的指定进行自动…

vue3 开发记录

1.引入nprogress插件,显示未声明文件 无法找到模块“nprogress”的声明文件。 解决方法: vite-env.d.ts // 解决引入模块的报错提示 declare module "nprogress";2.在 .evn 文件中创建了自定义环境变量 VITE_APP_BASE_URL 但在项目中使用时出…

【学习记录】Resnet

Resnet的残差块 BasicBlock模块: Resnet的作用 解决梯度消失。网络越深,会导致梯度消失。Resnet可以解决梯度消失的问题。 Resnet的原理 参考视频:https://www.bilibili.com/video/BV1cM4y117ob/?spm_id_from333.337.search-card.all.cl…

请查收:2024年腾讯云服务器优惠价格表_租用配置报价

一张表看懂腾讯云服务器租用优惠价格表,一目了然,腾讯云服务器分为轻量应用服务器和云服务器CVM,CPU内存配置从2核2G、2核4G、4核8G、8核16G、4核16G、8核32G、16核32G、16核64等配置可选,公网带宽1M、3M、5M、12M、18M、22M、28M…

FreeRTOS任务切换

目录 一、PendSV异常 二、任务切换场合 1、执行系统调用 2、滴答定时器(SysTick)中断 三、PendSV中断服务函数 1、分析xPortPendSVHandler中断服务函数 四、查找下一个要运行的任务的两种方法 1、获取下一个要运行的任务 2、查找下一个要运行的任务的两种方法 2.1、通…

Android全屏黑边解决方案

在Android12以上的手机&#xff0c;设置全屏后屏幕底部有黑边或者白边&#xff0c;有的屏幕顶部有黑边。解决方案很简单&#xff0c;在使用的主题中添加对应的设置即可&#xff0c;如下&#xff1a; res/values/themes.xml <resources><style name"Base.Theme.La…

C++:封装

封装:将数据和操作数据的方法进行结合, 隐藏具体的实现细节, 只提供接口用来交互 类: 一种自定义类型, 类域和访问限定符, 让外面只能看到该类的一些接口, 而看不到其具体的成员及接口的具体实现 类 语法:class name{...}; 里面可有成员函数, 成员变量类域: 访问类域里面的代…

Windows系统安装TortoiseSVN并结合内网穿透实现远程访问本地服务器——“cpolar内网穿透”

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统&#xff0c;它与Apache Subversion&#xff08;SVN&#xff09;集成在一起&#xff0c;提供了一个用户友好的界面&#xff0c;方便用…

ThreeDWorld(TDW)学习(待更新)

目录 前言 1.TDW 2.transport challenge 总结 前言 因为挑战赛了解到tdw仿真平台。 想了解的请点击&#xff1a; GitHub - threedworld-mit/tdw: ThreeDWorld simulation environment GitHub - chuangg/tdw-transport-challenge-starter-code 1.TDW ThreeDWorld (TDW)是一…

范德蒙行列式

范德蒙行列式&#xff08;Vandermonde determinant&#xff09;是一种特殊形式的行列式&#xff0c;常在多项式理论和插值中遇到。其命名来源于法国数学家Alexandre-Thophile Vandermonde。范德蒙行列式是以一组数为变量的行列式&#xff0c;其特殊之处在于每一行的元素是前一行…

VSCode安装与使用详细教程

一、引言 简要介绍VSCode&#xff08;Visual Studio Code&#xff09;是什么&#xff0c;它的主要特点和用途&#xff0c;以及为什么选择VSCode作为代码编辑器。 二、下载与安装 访问VSCode官方网站下载页面。选择适合操作系统的版本&#xff08;Windows、macOS、Linux&…

孩提家乐福愿

孩提家乐福愿 预知过往时&#xff0c;风雨夜晚事。 ​季暖烟火气&#xff0c;升级父母知。 ​爱孩绕膝闹&#xff0c;庭院长幼喜。 ​聚德传承系&#xff0c;言行耕读义。

数据卷dockerfile

目录 一、数据卷 1. 简介 2. 数据卷和数据卷容器 1. 数据卷&#xff1a; 2. 数据卷容器&#xff1a; 二、自定义镜像 1. 作用 2. 自定义centos 3. 自定义tomcat8 一、数据卷 1. 简介 数据卷是一个可供一个或多个容器使用的特殊目录&#xff0c;它将主机操作系统目录直…

mysql修改字段的长度锁表问题

mysql修改字段的长度锁表问题 背景 MySQL&#xff08;这里指5.6及其后续版本&#xff09;修改字段的长度锁表会锁表吗&#xff1f;答案是可能会但不一定会 具体原理 MySQL 5.6 及以后版本扩大字段长度 支持 online ddl in-place 模式&#xff0c;而这将不会锁表。varchar 表示…

string字符串进行分割

c标准库中&#xff0c;对string字符串并没有提供分割操作&#xff0c;需要自己手动实现此功能。 方式1&#xff1a; 采用 std::stringstream 输入字符串&#xff0c;通过getline()函数&#xff0c;来对字符串进行分割。 #include <sstream>void getSplit(std::string s…