- Published on
两个向量乘运算:内积与外积
- Authors

- Name
- Mao
两个向量乘运算
内积(点积)

两个向量点积得到一个数字,它表示一个向量在另一个向量上的投影,常用于计算向量的夹角、投影长度等。
外积

两个向量的外积得到一个秩为1的矩阵(Rank 1 Marix)。
什么是秩(Rank)?
简单来说,一个矩阵的秩可以理解为它的有效维度或者线性独立行(或列)的最大数量。
- 如果一个矩阵的行(或列)向量中,只有一个向量是线性独立的,那么它的秩就是1。
- 如果所有行向量都彼此线性相关,那这个矩阵的秩就是1,因为它们都指向同一个“方向”,只不过是不同倍数而已。
观察例子中的矩阵:
- 行:第二行是第一行的2倍,第三行是第一行的3倍
- 列:第二列是第一列的y/x倍 因此这个矩阵的秩为1。
意义与应用场景
点积
点积的结果是一个数字,它表示一个向量在另一个向量上的投影,常用于计算向量的夹角、投影长度等。
外积
外积的意义在于它提供了一种从简单到复杂的构建方式:它用两个一维向量作为“积木”,构建了一个二维的、但秩非常低的矩阵。
例如,一个黑白图像可以看作是一个矩阵,其中每个元素代表一个像素的亮度。我们可以通过两个向量的外积来创建一个简单的渐变图像:一个向量代表水平方向的亮度变化,另一个向量代表垂直方向的亮度变化,它们的外积就能生成一个平滑的二维亮度矩阵。
计算机语言表达
点积
import pytorch
# 创量两个向量 a b
b = torch.tensor([4,5,6], dtype=torch.float32)
a = torch.tensor([1,2,3], dtype=torch.float32)
# 点积
c = torch.dot(a,b)
'''
c
tensor(32.)
'''
# 外积
M = torch.outer(a,b)
'''
M
tensor([[ 4., 5., 6.],
[ 8., 10., 12.],
[12., 15., 18.]], dtype=torch.float16)
'''
# 求矩阵 M 的秩 (Rank)
r = torch.linalg.matrix_rank(M)
'''
r
tensor(1)
'''
使用外积构建一个图片
下面这一段代码,演示了如何使用两个向量的外积,并结合秩为1的特性,构建一个渐变图像,展示如何从简单构建复杂的过程。
import torch
import matplotlib.pyplot as plt
import numpy as np
import io
import base64
from IPython.display import Markdown
# 1. 定义图像尺寸
width = 256
height = 256
# 2. 创建水平和垂直亮度向量
horizontal_gradient = torch.linspace(0, 1, width, dtype=torch.float32)
vertical_gradient = torch.linspace(0, 1, height, dtype=torch.float32)
# 3. 计算外积,生成二维亮度矩阵
image_matrix = torch.outer(vertical_gradient, horizontal_gradient)
# 4. 将 PyTorch 张量转换为 NumPy 数组
image_np = image_matrix.numpy()
# 5. 使用 matplotlib 生成图像,并将其保存到内存缓冲区
buf = io.BytesIO()
plt.figure(figsize=(6, 6))
plt.imshow(image_np, cmap='gray', origin='upper')
plt.title(f"Generated Gradient Image ({width}x{height})")
plt.axis('off')
plt.savefig(buf, format='png', bbox_inches='tight')
plt.close() # 关闭图形,防止在文档中多次显示
# 6. 将内存缓冲区中的图像数据编码为 Base64 字符串
image_base64 = base64.b64encode(buf.getvalue()).decode('utf-8')
buf.close() # 关闭缓冲区
# 7. 构建 Markdown 图像标签
markdown_image = f""
print(markdown_image)
这个图片是上面代码生成的效果:
参考
线性代数相关的文章,主要参考的内容为两部分:
- Kenji Hiranabe针对Gilbert Strang教授《Linear Algebra for Everyone》的读书笔记:The Art of Linear Algebra https://anagileway.com/2021/08/28/the-art-of-linear-algebra/
- Gilbert Strang教授的MIT线性代数公开课: https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/