网站首页 > 技术文章 正文
Python 处理矩阵的方式有很多,其中最常用的库是 NumPy,它提供了高效的矩阵运算和操作能力。此外,pandas、SciPy 和 TensorFlow 等库也支持矩阵运算。下面介绍一下矩阵操作的详细解析。
1. 创建矩阵
使用 NumPy 创建矩阵
import numpy as np
# 1. 直接创建矩阵
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(A)
# 2. 创建零矩阵
zero_matrix = np.zeros((3, 3))
print(zero_matrix)
# 3. 创建全 1 矩阵
ones_matrix = np.ones((3, 3))
print(ones_matrix)
# 4. 创建单位矩阵(对角线为1)
identity_matrix = np.eye(3)
print(identity_matrix)
# 5. 创建随机矩阵
random_matrix = np.random.rand(3, 3) # 生成 0-1 之间的随机数
print(random_matrix)
2. 矩阵基本操作
矩阵转置
A_T = A.T # 交换行列
print(A_T)
矩阵加法、减法
B = np.array([[9, 8, 7], [6, 5, 4], [3, 2, 1]])
# 矩阵相加
C_add = A + B
print(C_add)
# 矩阵相减
C_sub = A - B
print(C_sub)
矩阵数乘
C_mul = A * 2 # 每个元素乘以2
print(C_mul)
矩阵点乘(矩阵乘法)
C_dot = np.dot(A, B) # 矩阵乘法
print(C_dot)
# 或者使用 @ 符号(Python 3.5+)
C_dot2 = A @ B
print(C_dot2)
矩阵 Hadamard 乘积(逐元素相乘)
C_hadamard = A * B # 对应元素相乘
print(C_hadamard)
3. 访问矩阵元素
索引和切片
# 访问单个元素 (从 0 开始索引)
print(A[1, 2]) # 访问第二行第三列的元素
# 访问某一行
print(A[1, :]) # 访问第二行的所有元素
# 访问某一列
print(A[:, 2]) # 访问第三列的所有元素
# 访问子矩阵
print(A[0:2, 1:3]) # 访问前两行和后两列的子矩阵
4. 矩阵的行列操作
添加行或列
# 添加一列
new_col = np.array([[10], [20], [30]]) # 3x1 列向量
A_new = np.hstack((A, new_col)) # 横向拼接
print(A_new)
# 添加一行
new_row = np.array([[10, 20, 30, 40]]) # 1x4 行向量
A_new2 = np.vstack((A_new, new_row)) # 纵向拼接
print(A_new2)
删除行或列
# 删除第1列(索引0)
A_del_col = np.delete(A, 0, axis=1)
print(A_del_col)
# 删除第2行(索引1)
A_del_row = np.delete(A, 1, axis=0)
print(A_del_row)
5. 矩阵求逆、行列式和特征值
矩阵求逆
A_inv = np.linalg.inv(A)
print(A_inv)
注意:只有 方阵(行数 = 列数)且行列式不为 0 的矩阵才可逆,否则会报错。
矩阵行列式
det_A = np.linalg.det(A)
print(det_A)
特征值和特征向量
eig_vals, eig_vecs = np.linalg.eig(A)
print("特征值:", eig_vals)
print("特征向量:\n", eig_vecs)
6. 矩阵分解
LU 分解
from scipy.linalg import lu
P, L, U = lu(A)
print("P 矩阵:\n", P)
print("L 矩阵:\n", L)
print("U 矩阵:\n", U)
QR 分解
Q, R = np.linalg.qr(A)
print("Q 矩阵:\n", Q)
print("R 矩阵:\n", R)
SVD(奇异值分解)
U, S, Vt = np.linalg.svd(A)
print("U 矩阵:\n", U)
print("S 值:\n", S)
print("V 矩阵:\n", Vt)
7. 矩阵应用
解线性方程组 Ax = b
b = np.array([1, 2, 3]) # 右端项
x = np.linalg.solve(A, b)
print("解 x:", x)
计算矩阵的范数
norm_A = np.linalg.norm(A) # 计算矩阵的二范数
print(norm_A)
计算协方差矩阵
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
cov_matrix = np.cov(data)
print(cov_matrix)
猜你喜欢
- 2025-07-08 最让人惊艳的并行算法之一——矩阵算法
- 2025-07-08 小红书基于 PPO 的多模态大模型 RLHF 系统的设计与优化
- 2025-07-08 洞察宇宙(十七):线性代数期末复习指南
- 2025-07-08 线性代数:矩阵的定义和简单计算。
- 2025-07-08 OpenAI久违发了篇「正经」论文:线性布局实现高效张量计算
- 2025-07-08 全网最详细!油管1小时视频详解AlphaTensor矩阵乘法算法
- 2025-07-08 初等矩阵简单性质(初等矩阵的性质及例子)
- 2025-07-08 越览(44)——Matlab入门学习(3)之矩阵运算
- 2025-07-08 可以用爱因斯坦求和替代的那些矩阵运算
- 2025-07-08 浅谈LabelSmooth两种实现及推导(labels and)
- 1510℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 545℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 498℃MySQL service启动脚本浅析(r12笔记第59天)
- 478℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 476℃启用MySQL查询缓存(mysql8.0查询缓存)
- 455℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 436℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 433℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)