当前位置: 首页 > news >正文

python科学计算:NumPy 线性代数与矩阵操作

1 NumPy 中的矩阵与数组

在 NumPy 中,矩阵实际上是一种特殊的二维数组,因此几乎所有数组的操作都可以应用到矩阵上。不过,矩阵运算与一般的数组运算存在一定的区别,尤其是在点积、乘法等操作中。

1.1 创建矩阵

矩阵可以通过 NumPy 的 array() 函数创建。矩阵的形状可以通过 shape 属性来访问。

import numpy as np# 创建一个 2x3 矩阵
matrix = np.array([[1, 2, 3], [4, 5, 6]])print("矩阵:\n", matrix)
print("矩阵的形状:", matrix.shape)
1.2 矩阵与标量的运算

矩阵与标量的加法、减法、乘法和除法等运算会作用于矩阵的每个元素,类似于数组的广播机制。

# 矩阵与标量的运算
result = matrix * 2
print("矩阵与标量相乘的结果:\n", result)

2 矩阵的基本运算
2.1 矩阵加法与减法

矩阵加法和减法是元素对应的操作,只有当两个矩阵的形状相同时,才能进行加法或减法。

# 创建两个矩阵
matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])# 矩阵加法
sum_matrix = matrix1 + matrix2
print("矩阵加法结果:\n", sum_matrix)# 矩阵减法
diff_matrix = matrix1 - matrix2
print("矩阵减法结果:\n", diff_matrix)
2.2 矩阵乘法

NumPy 中的 dot() 函数用于执行矩阵乘法,或称为矩阵的点积操作。矩阵乘法的前提是第一个矩阵的列数必须等于第二个矩阵的行数。

# 矩阵乘法
product_matrix = np.dot(matrix1, matrix2)
print("矩阵乘法结果:\n", product_matrix)

注意: 矩阵的元素对应乘法使用 * 操作符即可,但这不是矩阵乘法。

2.3 矩阵转置

transpose() 函数用于矩阵的转置操作,即将矩阵的行和列互换。

# 矩阵转置
transposed_matrix = matrix1.transpose()
print("转置后的矩阵:\n", transposed_matrix)
2.4 单位矩阵与对角矩阵
  • 单位矩阵: 单位矩阵是主对角线元素全为 1,其余元素全为 0 的矩阵,可以使用 np.eye() 创建。
  • 对角矩阵: 对角矩阵是除了对角线外,其余元素均为 0 的矩阵,可以使用 np.diag() 创建。
# 创建单位矩阵
identity_matrix = np.eye(3)
print("单位矩阵:\n", identity_matrix)# 创建对角矩阵
diag_matrix = np.diag([1, 2, 3])
print("对角矩阵:\n", diag_matrix)

3 矩阵的逆与行列式
3.1 矩阵的逆

可逆矩阵(即非奇异矩阵)是指其行列式不为 0 的矩阵。NumPy 提供了 inv() 函数用于计算矩阵的逆。只有方阵(行数等于列数的矩阵)才能求逆。

from numpy.linalg import inv# 计算矩阵的逆
inverse_matrix = inv(matrix1)
print("矩阵的逆:\n", inverse_matrix)
3.2 矩阵的行列式

矩阵的行列式是一个标量值,用来描述矩阵的某些性质。det() 函数用于计算方阵的行列式。如果矩阵的行列式为 0,则该矩阵不可逆。

from numpy.linalg import det# 计算矩阵的行列式
determinant = det(matrix1)
print("矩阵的行列式:", determinant)

4 特征值与特征向量

在线性代数中,特征值和特征向量是非常重要的概念。对于一个方阵,特征向量是非零向量,当该向量与矩阵相乘时,结果是原向量的一个倍数,该倍数称为特征值。

4.1 计算特征值和特征向量

eig() 函数可以用于计算方阵的特征值和特征向量。返回的结果是一个包含两个数组的元组:第一个数组是特征值,第二个数组是对应的特征向量。

from numpy.linalg import eig# 计算特征值与特征向量
eigenvalues, eigenvectors = eig(matrix1)
print("特征值:", eigenvalues)
print("特征向量:\n", eigenvectors)
4.2 特征值分解的应用

特征值分解在很多领域都有广泛的应用,例如主成分分析(PCA)、图像压缩等。通过特征值分解,可以将矩阵分解成多个简单的矩阵形式,简化后续计算。


5 奇异值分解(SVD)

奇异值分解(Singular Value Decomposition, SVD)是一种矩阵分解技术,用于将矩阵分解为三个矩阵的乘积。它在数据压缩、降维等领域非常有用。

5.1 svd() 函数

svd() 函数可以将矩阵分解为三个矩阵:USV。其中 UV 是正交矩阵,S 是一个对角矩阵。

from numpy.linalg import svd# 进行奇异值分解
U, S, V = svd(matrix1)
print("U 矩阵:\n", U)
print("S 矩阵:\n", S)
print("V 矩阵:\n", V)
5.2 SVD 的应用

SVD 被广泛应用于信号处理、图像压缩和数据降维等领域。例如,在推荐系统中,SVD 可用于分解用户-物品评分矩阵,从而提取出用户和物品的潜在特征。


6 矩阵的分解

除了奇异值分解,NumPy 还支持其他几种矩阵分解方法,比如 LU 分解和 QR 分解。

1 LU 分解

LU 分解将一个矩阵分解为一个下三角矩阵和一个上三角矩阵。NumPy 提供了 lu() 函数来进行 LU 分解。

from scipy.linalg import lu# LU 分解
P, L, U = lu(matrix1)
print("P 矩阵:\n", P)
print("L 矩阵:\n", L)
print("U 矩阵:\n", U)
2 QR 分解

QR 分解将矩阵分解为一个正交矩阵和一个上三角矩阵。NumPy 提供了 qr() 函数来进行 QR 分解。

# QR 分解
Q, R = np.linalg.qr(matrix1)
print("Q 矩阵:\n", Q)
print("R 矩阵:\n", R)

相关文章:

python科学计算:NumPy 线性代数与矩阵操作

1 NumPy 中的矩阵与数组 在 NumPy 中,矩阵实际上是一种特殊的二维数组,因此几乎所有数组的操作都可以应用到矩阵上。不过,矩阵运算与一般的数组运算存在一定的区别,尤其是在点积、乘法等操作中。 1.1 创建矩阵 矩阵可以通过 Nu…...

Unity面向对象补全计划 之 List<T>与class(非基础)

C# & Unity 面向对象补全计划 泛型-CSDN博客 关于List,其本质就是C#封装好的一个数组,是一个很好用的轮子,所以并不需要什么特别说明 问题描述 假设我们有一个表示学生的类 Student,每个学生有姓名和年龄两个属性。我们需要创…...

ant design vue+vue3+ts+xlsx实现表格导出问excel文件(带自定义表头)~

1、首先默认你已安装ant design vue、xlsx 库、及file-saver。 2、导入: import * as XLSX from xlsx; import { saveAs } from file-saver; 注:这里的xlsx导入不能这么写,否则会报错,原因是版本不一致,语法向上兼容…...

基于Python爬虫的淘宝服装数据分析项目

文章目录 一.项目介绍二.爬虫代码代码分析 三. 数据处理四. 数据可视化 一.项目介绍 该项目是基于Python爬虫的淘宝服装数据分析项目,以致于帮助商家了解当前服装市场的需求,制定更加精确的营销策略。首先,需要爬取淘宝中关于服装的大量数据…...

Tomcat控制台乱码问题已解决(2024/9/7

步骤很详细,直接上教程 问题复现: 情景一 情景二 原因简述 这是由于编码不一致引起的,Tomcat启动后默认编码UTF-8,而Windows的默认编码是GBK。因此你想让其不乱码,只需配置conf\logging.properties的编码格式即可 解决…...

vue通过html2canvas+jspdf生成PDF问题全解(水印,分页,截断,多页,黑屏,空白,附源码)

前端导出PDF的方法不多,常见的就是利用canvas画布渲染,再结合jspdf导出PDF文件,代码也不复杂,网上的代码基本都可以拿来即用。 如果不是特别追求完美的情况下,或者导出PDF内容单页的话,那么基本上也就满足业…...

服务器数据恢复—Raid磁盘阵列故障类型和常见故障原因

出于尽可能避免数据灾难的设计初衷,RAID解决了3个问题:容量问题、IO性能问题、存储安全(冗余)问题。从数据恢复的角度讨论RAID的存储安全问题。 常见的起到存储安全作用的RAID方案有RAID1、RAID5及其变形。基本设计思路是相似的:当部分数据异…...

C++字符串中的string类操作

愿我如星君如月,夜夜流光相皎洁。 ——《车逍遥篇》【宋】范成大 目录 正文: 主要特点: 基本操作: 代码演示: 总结: 今天我们接着上次的章节继续,这次我们来说一个为解决上个方法的缺陷而诞…...

axios设置responseType: ‘blob‘,获取接口返回的错误信息

在axios的请求中当后端接口返回的是文件流的情况下,我们需要在请求参数里面设置responseType: blob,如果接口报错,默认前端无法获取后端返回的错误信息。 解决方法:通过FileReader获取错误信息 async handleFetch() {const res aw…...

【C++】:模板初阶—函数模板|类模板

✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山岗! 💫 欢迎来到我的学习笔记! 本文参考博客:一同感受C模版的所带来的魅力 一、泛型编程思想 首先…...

Java 远程执行服务器上的命令

在Java中使用JSch库执行远程服务器上的命令是一种常见的做法,特别是在需要自动化运维任务或者进行远程文件操作时。以下是基于Codekru网站提供的示例,展示如何使用JSch库在远程服务器上执行单个或多个命令。 准备工作 首先,确保您的项目中已…...

3DMax基础- 创建基础模型

目录 零.软件简介 一. 标准基本型 长方体 圆锥体 球体 圆柱体 管状体 圆环 四棱锥 茶壶 平面​编辑 加强型文本 二. 扩展基本体 三.复合对象 变形 散布 一致 连接 图形合并 布尔 并集 合并 交集 差集 四.门和窗 门 窗 植物,栏杆,墙 零.软件简介 3…...

JavaScript 知识点(从基础到进阶)

🌏个人博客主页:心.c ​ 前言:JavaScript已经学完了,和大家分享一下我的笔记,希望大家可以有所收获,花不多说,开干!!! 🔥🔥&#x1f5…...

计算机网络知识点复习——TCP协议的三次握手与四次挥手(连接与释放)

TCP协议的三次握手与四次挥手(连接与释放) 一、前言二、简单的知识准备1. TCP协议的主要特点2. TCP报文段 三、TCP连接的建立(三次握手)四、TCP连接的释放(四次挥手)五、TCP连接与释放的总结六、结束语 一、…...

SpringDataJPA系列(7)Jackson注解在实体中应用

SpringDataJPA系列(7)Jackson注解在实体中应用 常用的Jackson注解 Springboot中默认集成的是Jackson,我们可以在jackson依赖包下看到Jackson有多个注解 一般常用的有下面这些: 一个实体的示例 测试方法如下: 按照上述图片中的序号做个简…...

【Spring Boot 3】【Web】统一封装 HTTP 响应体

【Spring Boot 3】【Web】统一封装 HTTP 响应体 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总…...

Linux如何做ssh反向代理

SSH反向代理是一种通过SSH协议实现的安全远程访问方式,它允许客户端通过SSH连接到一台具有公网IP的代理服务器,然后这台代理服务器再将请求转发给内部网络中的目标主机。以下是实现SSH反向代理的步骤: 一、准备工作 确保服务器配置&#xff…...

Verilog语法+:和-:有什么用?

Verilog语法:和-:主要用于位选择,可以让代码更简洁。 一、位选择基础 在Verilog中,位选择可以通过直接索引来实现,例如: reg [7:0] data; wire select_a; wire [2:0] select_b; assign select_a data[3]; assign select_b …...

stm32F103 串口2 中断 无法接收指定字符串 [已解决]

stm32F103 串口2中断接收指定字符串 USART 初始化和中断配置示例中断处理函数示例关键点总结 确保在串口配置中正确使能空闲中断 ( USART_IT_IDLE) 是关键。这个中断可以帮助你在串口接收一帧数据完成后,进行相应的处理和分析。 为了确保你在串口配置时能避免类似问…...

Matlab/Simulink和AMEsim联合仿真(以PSO-PID算法为例)

目录 安装软件和配置环境变量 Matlab/Simulink和AMEsim联合仿真详细流程 非常重要的一点 Simulink模型和AMEsim模型用S-Function建立连接 从AMEsim软件打开Matlab Matlab里的设置 Matlab的.m文件修改(对于PSO-PID算法) 运行程序 我印象中好像做过…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...

aardio 自动识别验证码输入

技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...