线性变换与矩阵乘法的奥秘
背景简介
在探索线性代数的世界中,我们经常遇到基向量、线性变换和矩阵乘法等核心概念。这些概念不仅构成了现代数学的基础,还广泛应用于计算机图形学、机器学习和数据分析等领域。在本篇文章中,我们将深入探讨这些主题,并通过实际的Python代码和图形展示,揭示它们之间的联系和应用。
线性变换的基础
线性变换是一种特殊的函数,它保持向量加法和标量乘法的性质。通过矩阵与向量的乘积,我们可以实现对向量的线性变换。例如,通过使用基向量 i_hat
和 j_hat
,我们可以构建一个基础矩阵,并通过它来变换一个二维向量 v
。
from numpy import array
# 声明基向量
i_hat = array([2, 0])
j_hat = array([0, 3])
# 构建基础矩阵
basis = array([i_hat, j_hat]).transpose()
# 声明向量v
v = array([2, 1])
# 通过基础矩阵变换向量v
new_v = basis.dot(v)
print(new_v) # 输出结果为 [4, 3]
在上述代码中,我们创建了一个新的向量 new_v
,它是原始向量 v
在基础矩阵变换下的结果。
复杂变换的探索
在二维空间中,我们还可以实现更复杂的变换,如旋转、剪切和翻转。例如,通过调整基向量的值,我们可以实现对空间的旋转和剪切。
# 声明更复杂的基向量
i_hat = array([2, 3])
j_hat = array([2, -1])
# 构建基础矩阵
basis = array([i_hat, j_hat]).transpose()
# 通过基础矩阵变换向量v
new_v = basis.dot(v)
print(new_v) # 输出结果为 [6, 5]
在这个例子中,向量 v
经过基础矩阵的变换后,不仅被拉伸,还发生了旋转和剪切。
三维及以上维度的基向量
当我们扩展到三维或更高维度时,基向量的概念同样适用。例如,在三维空间中,我们可以使用 i_hat
、 j_hat
和 k_hat
来描述三维空间的基向量。
矩阵乘法的原理
矩阵乘法是线性代数中的核心概念之一。它允许我们将多个变换组合在一起,形成一个单一的变换。例如,通过矩阵乘法,我们可以将旋转和剪切这两种变换合并为一个变换。
# 使用NumPy合并变换矩阵
from numpy import array
# 变换1
i_hat1 = array([0, 1])
j_hat1 = array([-1, 0])
transform1 = array([i_hat1, j_hat1]).transpose()
# 变换2
i_hat2 = array([1, 0])
j_hat2 = array([1, 1])
transform2 = array([i_hat2, j_hat2]).transpose()
# 合并变换
combined = transform2 @ transform1
# 测试变换
v = array([1, 2])
print(combined.dot(v)) # 输出结果为 [-1, 1]
在这个例子中,我们合并了两个变换矩阵,并使用合并后的矩阵对向量 v
进行了变换。
DOT()与MATMUL()和@的使用比较
在NumPy中, dot()
和 matmul()
方法都可以用来执行矩阵乘法。然而,对于高维矩阵和元素广播, matmul()
通常更为高效。此外,矩阵乘法是不可交换的,意味着变换的顺序会影响最终结果。
总结与启发
通过探索线性变换和矩阵乘法,我们可以更深入地理解向量在不同变换下的行为。这种理解不仅有助于我们在数学和计算机科学中解决问题,还能够启发我们从不同角度思考问题的本质。掌握这些概念,将为我们打开一扇通往更高维度世界的大门。