NumPy线性代数功能全解析:矩阵运算与方程求解实用指南
NumPy 是线性代数领域中高效的工具。它可以帮助完成矩阵运算和方程求解。本文将介绍 NumPy 中用于线性代数的常用函数。
矩阵乘法
矩阵乘法会根据两个矩阵生成一个新矩阵。具体做法是将第一个矩阵的每一行与第二个矩阵的每一列相乘,并将乘积相加,得到新矩阵的对应元素。
# 定义矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# 矩阵乘法
C = np.dot(A, B)
print("矩阵乘法结果:\n", C)# 输出结果:
# [[19 22]
# [43 50]]
矩阵求逆
将一个矩阵与其逆矩阵相乘,可以得到单位矩阵。矩阵求逆常用于求解线性方程组。只有方阵且非奇异矩阵才有逆矩阵。
# 定义方阵
A = np.array([[1, 2], [3, 4]])
# 矩阵求逆
A_inv = np.linalg.inv(A)
print("矩阵的逆:\n", A_inv)# 输出结果:
# [[-2. 1. ]
# [ 1.5 -0.5]]
矩阵行列式
矩阵的行列式是由矩阵计算出的一个数值。它可以判断矩阵是否可逆。行列式的计算规则依赖于矩阵的大小。
# 定义方阵
A = np.array([[1, 2], [3, 4]])
# 计算行列式
det_A = np.linalg.det(A)
print("矩阵的行列式:", det_A)# 输出结果: -2.0000000000000004
矩阵迹(Trace)
矩阵的迹是对角线元素之和,仅适用于方阵。迹的值是一个单一的数。
# 定义方阵
A = np.array([[1, 2], [3, 4]])
# 计算迹
trace_A = np.trace(A)
print("矩阵的迹:", trace_A)# 输出结果: 5
矩阵转置
矩阵转置是指将矩阵沿主对角线翻转,将行和列的位置互换。
# 定义矩阵
A = np.array([[1, 2, 3], [4, 5, 6]])
# 计算转置
A_T = np.transpose(A)
print("矩阵的转置:\n", A_T)# 输出结果:
# [[1 4]
# [2 5]
# [3 6]]
特征值与特征向量
特征值表示特征向量在变换中的缩放比例。特征向量在该变换下方向不变。
# 定义方阵
A = np.array([[1, 2], [3, 4]])
# 计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(A)
print("特征值:", eigenvalues)
print("特征向量:\n", eigenvectors)# 输出结果:
# 特征值: [-0.37228132 5.37228132]
# 特征向量:
# [[-0.82456484 -0.41597356]
# [ 0.56576746 -0.90937671]]
LU 分解
LU 分解将一个矩阵分解为下三角矩阵(L)和上三角矩阵(U)的乘积。常用于求解线性最小二乘问题和特征值问题。
import numpy as np
from scipy.linalg import lu# 定义矩阵
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# LU分解
P, L, U = lu(A)
# 显示结果
print("LU分解结果:")
print("P矩阵:\n", P)
print("L矩阵:\n", L)
print("U矩阵:\n", U)# 输出结果:
# P矩阵:
# [[0. 1. 0.]
# [0. 0. 1.]
# [1. 0. 0.]]
# L矩阵:
# [[ 1. 0. 0. ]
# [ 0.33333333 1. 0. ]
# [ 0.66666667 -0.5 1. ]]
# U矩阵:
# [[ 7. 8. 9. ]
# [ 0. 0.33333333 0.66666667]
# [ 0. 0. 0. ]]
QR分解
QR 分解将一个矩阵分解为正交矩阵(Q)和上三角矩阵(R)。常用于最小二乘法和特征值计算。
import numpy as np
from scipy.linalg import qr# 定义矩阵
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# QR分解
Q, R = qr(A)
# 显示结果
print("QR分解结果:")
print("Q矩阵:\n", Q)
print("R矩阵:\n", R)# 输出结果:
# Q矩阵:
# [[-0.26726124 -0.78583024 0.55708601]
# [-0.53452248 -0.08675134 -0.83125484]
# [-0.80178373 0.6172134 0.08122978]]
# R矩阵:
# [[-7.41619849 -8.48528137 -9.55445709]
# [ 0. -0.90453403 -1.80906806]
# [ 0. 0. 0. ]]
奇异值分解(SVD)
SVD 将一个矩阵分解为三个矩阵:U、Σ 和 V*。U 和 V* 是正交矩阵,Σ 是对角矩阵。SVD 在数据降维和线性系统求解等领域有广泛应用。
import numpy as np
from scipy.linalg import svd# 定义矩阵
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 奇异值分解
U, s, Vh = svd(A)
# 显示结果
print("SVD分解结果:")
print("U矩阵:\n", U)
print("奇异值:\n", s)
print("Vh矩阵:\n", Vh)# 输出结果:
# U矩阵:
# [[-0.21483724 0.88723069 0.40824829]
# [-0.52058739 0.24964395 -0.61237224]
# [-0.82633755 -0.38794279 0.61237224]]
# 奇异值:
# [16.84810335 1.06836951 0. ]
# Vh矩阵:
# [[-0.47967118 -0.57236779 -0.66506439]
# [ 0.77669099 0.07568647 -0.62531812]
# [-0.40824829 0.81649658 -0.40824829]]
线性方程组的直接解法
直接求解线性方程组,计算出使方程组所有等式成立的变量值。每个方程代表一条直线,解为这些直线的交点。
# 定义矩阵A和向量B
A = np.array([[3, 1], [1, 2]])
B = np.array([9, 8])
# 求解线性方程组 Ax = B
x = np.linalg.solve(A, B)
print("线性方程组的解:", x)# 输出结果: [2. 3.]
最小二乘拟合
最小二乘拟合用于寻找与数据点最匹配的解,最小化实际值与预测值的平方差。
# 定义矩阵A和向量B
A = np.array([[1, 1], [1, 2], [1, 3]])
B = np.array([1, 2, 2])
# 求解最小二乘问题
x, residuals, rank, s = np.linalg.lstsq(A, B, rcond=None)
print("最小二乘解:", x)
print("残差:", residuals)
print("矩阵秩:", rank)
print("奇异值:", s)# 输出结果:
# 最小二乘解: [0.66666667 0.5]
# 残差: [0.33333333]
# 矩阵秩: 2
# 奇异值: [4.07914333 0.60049122]
矩阵范数
矩阵范数用于衡量一个矩阵的“大小”,常用于数值稳定性分析和矩阵分析。
# 定义矩阵
A = np.array([[1, 2], [3, 4]])
# 计算各种范数
frobenius_norm = np.linalg.norm(A, 'fro')
one_norm = np.linalg.norm(A, 1)
infinity_norm = np.linalg.norm(A, np.inf)
print("Frobenius范数:", frobenius_norm)
print("1-范数:", one_norm)
print("无穷范数:", infinity_norm)# 输出结果:
# Frobenius范数: 5.477225575051661
# 1-范数: 6.0
# 无穷范数: 7.0
条件数
矩阵的条件数衡量输入变化对解的敏感性。条件数高表示解可能不稳定。
# 定义矩阵
A = np.array([[1, 2], [3, 4]])
# 计算条件数
condition_number = np.linalg.cond(A)
print("条件数:", condition_number)# 输出结果: 14.933034373659268
矩阵秩
矩阵的秩是指其线性无关的行或列的数量,反映了矩阵所能覆盖的向量空间的维度。
# 定义矩阵
A = np.array([[1, 2], [3, 4]])
# 计算矩阵秩
rank_A = np.linalg.matrix_rank(A)
print("矩阵秩:", rank_A)# 输出结果: 2
总结
NumPy 简化了矩阵运算和线性方程组求解等任务。你可以在官方网站了解更多关于这些 NumPy 函数的详细信息。
相关文章:

NumPy线性代数功能全解析:矩阵运算与方程求解实用指南
NumPy 是线性代数领域中高效的工具。它可以帮助完成矩阵运算和方程求解。本文将介绍 NumPy 中用于线性代数的常用函数。 矩阵乘法 矩阵乘法会根据两个矩阵生成一个新矩阵。具体做法是将第一个矩阵的每一行与第二个矩阵的每一列相乘,并将乘积相加,得到新…...

《RabbitMQ 全面解析:从原理到实战的高性能消息队列指南》
一、RabbitMQ 核心原理与架构 1. 核心组件与工作流程 RabbitMQ 基于 AMQP 协议,核心组件包括 生产者(Producer)、交换机(Exchange)、队列(Queue) 和 消费者(Consumer)。…...
jenkins slave节点打包报错Failed to create a temp file on
jenkins slave节点打包报错 一、报错信息 FATAL: Unable to produce a script file Also: hudson.remoting.Channel$CallSiteStackTrace: Remote call to slave-83at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1784)at hudson.remoting.UserRequest$…...
计算机视觉——通过 OWL-ViT 实现开放词汇对象检测
介绍 传统的对象检测模型大多是封闭词汇类型,只能识别有限的固定类别。增加新的类别需要大量的注释数据。然而,现实世界中的物体类别几乎无穷无尽,这就需要能够检测未知类别的开放式词汇类型。对比学习(Contrastive Learning)使用成对的图像和语言数据,在这一挑战中备受…...

Android Framework学习二:Activity创建及View绘制流程
文章目录 Window绘制流程Window Manager Service(WMS)SurfaceSurfaceFlinger 安卓View层次结构ActivityPhoneWindowActivity与PhoneWindow两者之间的关系ViewRootImplDecorViewDecorView 的作用DecorView 的结构总结 Activity创建流程View invalidate调用…...

python如何在深度学习框架目标检测算法使用Yolov8训练道路汽车漆面车漆缺陷数据集 建立基于YOLOv8道路汽车漆面缺陷(划痕)检测系统
基于YOLOv8道路汽车漆面缺陷(划痕)检测系统 文章目录 1. 安装依赖2. 数据集准备与划分3. 数据预处理4. 配置YOLOv85. 训练和评估模型6. 推理与可视化7. 构建GUI应用程序 道路汽车漆面车漆缺陷检测数据集1221张 1类 汽车漆面缺陷检测YOLO数据集 1221张…...

高性能、云原生的对象存储服务MinIO 详细介绍与案例应用
什么是MinIO? MinIO是一个高性能、云原生的对象存储服务,采用Apache License v2.0开源协议发布。它与Amazon S3云存储服务API兼容,适合构建高性能、可扩展的存储基础设施。支持大规模非结构化数据的存储,适合图片、视频、日志、备…...
Tailwind CSS 响应式设计解析(含示例)
本文内容: Tailwindcss V4 中如何使用响应式设计功能,包括默认断点、自定义断点、断点范围控制以及容器查询的各种技巧,帮助你在不离开 HTML 的前提下优雅构建响应式页面。 🌟 默认断点用法(移动优先) Tail…...

Arduino按键开关编程详解
一、按键开关的基本原理与硬件连接 1.1 按键开关的工作原理 按键开关是一种常见的输入设备,其核心原理基于机械触点的闭合与断开。当用户按下按键时,内部的金属片会连接电路两端,形成通路;松开按键后,金属片在弹簧作…...

鸢尾花(Iris)数据集的多模型分类与可视化分析工具
该程序是一个鸢尾花(Iris)数据集的多模型分类与可视化分析工具,主要功能如下: 1. 数据加载与预处理 功能说明: 使用sklearn.datasets.load_iris()加载经典的鸢尾花数据集。将数据转为pandas.DataFrame,并将类别数字标签映射为中文类别名(山鸢尾、变色鸢尾、维吉尼亚鸢尾…...
【软件设计师:复习】上午题核心知识点总结(一)
一、数据结构与算法(高频) 1. 线性数据结构 数组与链表 数组:随机访问(O(1))、插入/删除(O(n))、内存连续。链表:单向链表、双向链表、循环链表;插入/删除(O(1))、随机访问(O(n))。典型问题: 合并两个有序链表(LeetCode 21)。链表反转(迭代/递归实现)。栈与…...

[蓝桥杯 2023 国 Python B] 划分 Java
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int[] arr new int[41];int sum 0;for (int i 1; i < 40; i) {arr[i] sc.nextInt();sum arr[i];}sc.close();int target sum / 2; // 最接近的两…...
Node.js 应用部署:镜像体积优化与安全的多阶段构建探索
Node.js 应用部署:镜像体积优化与安全的多阶段构建探索 在开发 Node.js 应用时,部署过程中的镜像体积优化和安全性保障是至关重要的环节。本文将通过两种不同的 Docker 部署方式,深入探讨如何实现高效的镜像体积优化和安全的部署环境。 传统的单阶段构建方式 许多开发者在…...
【Java面试笔记:进阶】23.请介绍类加载过程,什么是双亲委派模型?
Java的类加载机制是JVM的核心组成部分,其过程分为三个阶段,并采用双亲委派模型来保证类加载的安全性和一致性。 1.类加载过程 1.加载阶段(Loading) 核心任务:查找并加载类的二进制字节流(如.class文件)。具体行为: 将字节码数据从不同数据源(如文件系统、网络等)读…...

25.4.30数据结构|并查集 路径压缩
书接上回 上一节:数据结构|并查集 前言 (一)理论理解: 1、在QuickUnion快速合并的过程中,每次都要找根ID,而路径压缩让找根ID变得更加迅速直接。 2、路径压缩 针对的是findRootIndex()【查找根ID】进行的压…...

MATLAB R2024a安装教程
安装步骤: 软件大小:约12.08G 安装环境:Win10~Win11或更高 下载好安装包,可以在网上找个安装包,比如我用国内镜像matlab地址github.com/futureflsl/matlab-chinese-mirror,这样下载稍微快点 1.开始安装…...
ag-grid-react 列表导出csv列表getDataAsCsv (自定义导出列表配置)自定义新增,修改导出内容
1.ag-grid-react getDataAsCsv 新增导出字段 方法:临时添加列再导出 你可以通过 columnApi.setColumnDefs() 临时添加需要导出的字段,然后再调用 getDataAsCsv,导出后再恢复原来的列。 import { useRef } from react; import { AgGridReac…...

WEB安全--社会工程--SET钓鱼网站
1、选择要钓鱼的网站 2、打开kali中的set 3、启动后依次选择: 4、输入钓鱼主机的地址(kali)和要伪装的网站域名: 5、投放钓鱼网页(服务器域名:80) 6、获取账号密码...

Java学习手册:Spring 数据访问
一、Spring JDBC JdbcTemplate :Spring JDBC 提供了 JdbcTemplate 类,它简化了数据库操作,提供了丰富的 API 来执行数据库访问任务。JdbcTemplate 可以自动处理数据库连接的获取、释放,SQL 语句的执行,结果集的处理等…...

linux 使用nginx部署next.js项目,并使用pm2守护进程
前言 本文基于:操作系统 CentOS Stream 8 使用工具:Xshell8、Xftp8 服务器基础环境: node - 请查看 linux安装node并全局可用pm2 - 请查看 linux安装pm2并全局可用nginx - 请查看 linux 使用nginx部署vue、react项目 所需服务器基础环境&…...

阿里云服务迁移实战: 07-其他服务迁移
概述 当完成了服务器、数据库、IP、OSS等迁移后,剩下的就是其他服务了。 短信网关 短信模板只能一个个创建,不能批量操作。但是可以使用以下方式优化操作。 在原账号导出模板列表 概述 当完成了服务器、数据库、IP、OSS等迁移后,剩下的…...

uniapp 实现低功耗蓝牙连接并读写数据实战指南
在物联网应用场景中,低功耗蓝牙(BLE)凭借其低能耗、连接便捷的特点,成为设备间数据交互的重要方式。Uniapp 作为一款跨平台开发框架,提供了丰富的 API 支持,使得在多个端实现低功耗蓝牙功能变得轻松高效。本…...

【Java学习笔记】递归
递归(recursion) 思想:把一个复杂的问题拆分成一个简单问题和子问题,子问题又是更小规模的复杂问题,循环往复 本质:栈的使用 递归的注意事项 (1)需要有递归出口,否者就…...
DigitalOcean推出Valkey托管缓存服务
今天我们激动地宣布推出DigitalOcean的Valkey托管缓存服务,这是我们全新的托管数据库服务,能够无缝替换托管缓存(此前称为托管Redis)。Valkey托管缓存服务在你一直依赖的功能基础上,还提供了增强工具来支持你的开发需求…...
ASP.NET MVC 入门指南四
21. 高级路由配置 21.1 自定义路由约束 除了使用默认的路由约束,你还可以创建自定义路由约束。自定义路由约束允许你根据特定的业务逻辑来决定一个路由是否匹配。例如,创建一个只允许特定年份的路由约束: csharp public class YearRouteCo…...

使用vue的插值表达式渲染变量,格式均正确,但无法渲染
如图,作者遇到的问题为,输入以下代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...

leetcode 977. Squares of a Sorted Array
题目描述 双指针法一 用right表示原数组中负数和非负数的分界线。 nums[0,right-1]的是负数,nums[right,nums.size()-1]是非负数。 然后用合并两个有序数组的方法。合并即可。 class Solution { public:vector<int> sortedSquares(vector<int>&…...
Mysql常用函数解析
字符串函数 CONCAT(str1, str2, …) 将多个字符串连接成一个字符串。 SELECT CONCAT(Hello, , World); -- 输出: Hello WorldSUBSTRING(str, start, length) 截取字符串的子串(起始位置从1开始)。 SELECT SUBSTRING(MySQL, 3, 2); -- 输出: SQ…...

llamafactory-cli webui启动报错TypeError: argument of type ‘bool‘ is not iterable
一、问题 在阿里云NoteBook上启动llamafactory-cli webui报错TypeError: argument of type ‘bool’ is not iterable This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run gradio deploy from the terminal in the working directory t…...
智能电子白板的设计与实现:从硬件选型到软件编程
摘要:本文围绕智能电子白板展开,详述其从硬件芯片与模块选型、接线布局,到软件流程图规划及关键代码编写等方面的设计与实现过程,旨在打造满足现代教育与商务会议需求的多功能智能设备。 注:有想法可在评论区或者看我个人简介。 一、引言 在现代教育与商务场景中,智能…...