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

【深度学习与大模型基础】第4章-矩阵的运算

1、矩阵的转置

什么是矩阵的转置?

矩阵的转置就是把矩阵的行和列互换。换句话说,原来的第 i 行第 j 列的元素,转置后就变成了第 j 行第 i 列的元素。

举个例子,假设我们有一个矩阵 A:

这个矩阵有 2 行 3 列。它的转置矩阵 A^{T}就是把行和列互换,变成一个 3 行 2 列的矩阵:

 

矩阵转置在计算机科学中的应用

矩阵转置在计算机科学中有很多应用,尤其是在数据处理算法设计中。下面举几个例子:

  1. 图像处理

    • 在图像处理中,图像可以表示为一个矩阵。转置操作可以用来旋转图像。比如,将图像矩阵转置后再进行一些处理,可以实现图像的90度旋转。

  2. 机器学习

    • 在机器学习中,数据通常以矩阵的形式表示。转置操作在计算中非常常见,比如在计算梯度下降时,需要对矩阵进行转置以便进行矩阵乘法。

  3. 数据库和数据分析

    • 在数据库中,数据表可以看作是一个矩阵。转置操作可以用来转换数据的表示形式,方便进行某些类型的查询和分析。

  4. 线性代数计算

    • 在解线性方程组或进行特征值计算时,矩阵转置是一个基本的操作。比如,在计算矩阵的逆或进行奇异值分解(SVD)时,转置操作是必不可少的。

python演示

矩阵的转置就是把矩阵的行和列互换。这个操作在计算机科学中非常有用,广泛应用于图像处理、机器学习、数据库管理和线性代数计算等领域。

import numpy as np
import matplotlib.pyplot as plt# 创建一个矩阵(2维张量)
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("Original Matrix:")
print(matrix)# 计算矩阵的转置
transposed_matrix = matrix.T
print("\nTransposed Matrix:")
print(transposed_matrix)# 可视化原始矩阵
plt.figure(figsize=(12, 5))plt.subplot(1, 2, 1)
plt.imshow(matrix, cmap='viridis')
plt.colorbar()
plt.title('Original Matrix')# 可视化转置后的矩阵
plt.subplot(1, 2, 2)
plt.imshow(transposed_matrix, cmap='viridis')
plt.colorbar()
plt.title('Transposed Matrix')plt.tight_layout()
plt.show()

2.矩阵的广播

什么是矩阵的广播?

广播是一种让不同形状的矩阵(或张量)在进行数学运算时能够兼容的机制。简单来说,它允许我们对形状不同的矩阵进行逐元素操作(比如加法、乘法等),而无需显式地改变它们的形状。

举个例子:

假设我们有一个矩阵 A 和一个向量 b:

 

如果我们想对 A 的每一行都加上向量 b,广播机制会自动将 b “扩展”成与 A 相同的形状,然后再进行逐元素相加:

这里,b 被广播成了一个 2×32×3 的矩阵:

 

广播的规则

广播并不是随便就能用的,它有一些规则:

  1. 维度对齐:从最后一个维度开始,两个矩阵的维度必须相同,或者其中一个矩阵的维度为 1。

  2. 扩展维度:如果某个维度的大小为 1,那么可以沿着这个维度复制数据,使其与另一个矩阵的对应维度大小匹配。

例子:
  • 矩阵 A 的形状是 3×4,矩阵 B 的形状是 1×4,那么 B 可以被广播成 3×4。

  • 矩阵 A 的形状是 5×3×4,矩阵 B 的形状是 1×3×4,那么 B 可以被广播成 5×3×4。

                                                                                                                                                           

广播在计算机科学中的应用

广播在计算机科学中非常有用,尤其是在以下领域:

  1. 深度学习

    • 在神经网络中,广播常用于对权重矩阵和输入数据进行逐元素操作。比如,在计算损失函数时,广播可以简化代码并提高计算效率。

  2. 数值计算

    • 在科学计算中,广播可以避免显式地复制数据,从而节省内存并加速计算。比如,在 NumPy 或 TensorFlow 中,广播机制被广泛使用。

  3. 图像处理

    • 在图像处理中,广播可以用来对图像的每个像素进行操作。比如,对一张彩色图像的每个通道加上一个固定的值。

python演示矩阵的广播

矩阵广播(broadcasting)是NumPy中一个强大的功能,它允许不同形状的数组进行算术运算。广播规则使得较小的数组在必要时会被“扩展”以匹配较大数组的形状。
下面是一个示例代码,演示如何使用NumPy进行矩阵广播,并使用Matplotlib进行可视化

import numpy as np
import matplotlib.pyplot as plt# 创建一个矩阵
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("Original Matrix:")
print(matrix)# 创建一个向量
vector = np.array([10, 20, 30])
print("\nVector:")
print(vector)# 使用广播进行加法运算
broadcasted_result = matrix + vector
print("\nBroadcasted Result:")
print(broadcasted_result)# 可视化原始矩阵
plt.figure(figsize=(12, 6))plt.subplot(1, 3, 1)
plt.imshow(matrix, cmap='viridis')
plt.colorbar()
plt.title('Original Matrix')# 可视化向量
plt.subplot(1, 3, 2)
plt.imshow(vector.reshape(1, -1), cmap='viridis', aspect='auto')
plt.colorbar()
plt.title('Vector')# 可视化广播后的结果
plt.subplot(1, 3, 3)
plt.imshow(broadcasted_result, cmap='viridis')
plt.colorbar()
plt.title('Broadcasted Result')plt.tight_layout()
plt.show()

3.矩阵的乘法

什么是矩阵的乘法?

矩阵的乘法是一种将两个矩阵结合起来生成一个新矩阵的操作。不过,矩阵乘法和我们熟悉的逐元素乘法不同,它有自己独特的规则。

规则:

假设我们有两个矩阵 A 和 B:

  • A 的形状是 m×n(m 行 n 列),

  • B 的形状是 n×p(n 行 p 列)。

那么,它们的乘积 C=A×B 的形状是 m×p。也就是说,结果矩阵 C 的行数等于 A 的行数,列数等于 B 的列数。

计算方法:

C 中的每个元素 Cij​ 是通过 A 的第 i 行和 B 的第 j 列对应元素相乘再相加得到的:


举个例子

假设我们有两个矩阵:


矩阵乘法在计算机科学中的应用

矩阵乘法在计算机科学中非常重要,尤其是在以下领域:

  1. 图形学

    • 在计算机图形学中,矩阵乘法用于实现图形的变换,比如平移、旋转和缩放。比如,一个 3D 物体的坐标可以通过矩阵乘法变换到屏幕上的 2D 坐标。

  2. 机器学习

    • 在神经网络中,矩阵乘法是核心操作之一。比如,输入数据与权重矩阵的乘积用于计算神经元的输出。

  3. 数据分析

    • 在数据分析中,矩阵乘法可以用于计算特征之间的相关性,或者降维(如主成分分析 PCA)。

  4. 推荐系统

    • 在推荐系统中,用户-物品评分矩阵可以通过矩阵分解(如奇异值分解 SVD)来预测用户对未评分物品的偏好。

python演示矩阵的乘法

import numpy as np
import matplotlib.pyplot as plt# 创建两个矩阵
matrix_a = np.array([[1, 2], [3,4]])
matrix_b = np.array([[5, 6], [7, 8]])
print("Matrix A:")
print(matrix_a)
print("\nMatrix B:")
print(matrix_b)# 进行矩阵乘法
matrix_product = np.dot(matrix_a, matrix_b)
print("\nMatrix Product (A * B):")
print(matrix_product)# 可视化矩阵A
plt.figure(figsize=(15, 5))plt.subplot(1, 3, 1)
plt.imshow(matrix_a, cmap='viridis')
plt.colorbar()
plt.title('Matrix A')# 可视化矩阵B
plt.subplot(1, 3, 2)
plt.imshow(matrix_b, cmap='viridis')
plt.colorbar()
plt.title('Matrix B')# 可视化矩阵乘法的结果
plt.subplot(1, 3, 3)
plt.imshow(matrix_product, cmap='viridis')
plt.colorbar()
plt.title('Matrix Product (A * B)')plt.tight_layout()
plt.show()


http://www.mrgr.cn/news/94491.html

相关文章:

  • Linux(2025.3.14)
  • C++前缀和
  • 【亲测有用】数据集成平台能力演示(支持国产数据库DaMeng与KingBase)
  • CNN 稠密任务经典结构
  • 多线程(超详细) (ε≡٩(๑>₃<)۶ 一心向学)
  • 16.使用读写包操作Excel文件:XlsxWriter 包
  • 《TCP/IP网络编程》学习笔记 | Chapter 18:多线程服务器端的实现
  • Java入职篇(1)——心态篇
  • Java面试:集合框架体系
  • 安装 Powerlevel10k 及 Oh My Zsh 的使用
  • macOS 终端优化
  • MySQL中的B+树索引经验总结
  • 嵌入式八股ARM篇
  • 多线程与并发编程 面试专题
  • HarmonyOS NEXT - 电商App实例三( 网络请求axios)
  • MFC控件按钮的使用
  • Docker 》》Docker Compose 》》network 网络 compose
  • 保姆级离线TiDB V8+解释
  • STAR Decomposition 一种针对极端事件的信号分解方法 论文精读加复现
  • ctf工具——Audacity的安装和使用