目录
[十七、转置与 reshape 的区别](#十七、转置与 reshape 的区别)
一、前言
在机器学习和深度学习中,有一个操作几乎无处不在:
矩阵转置(Transpose)
例如:
线性回归
逻辑回归
最小二乘法
PCA主成分分析
协方差矩阵
神经网络反向传播
都会频繁出现:
Aᵀ
很多初学者看到这个符号时会疑惑:
矩阵转置到底是什么?
为什么要转置?
转置后矩阵发生了什么变化?
实际上:
矩阵转置本质上是交换矩阵的行和列。
理解转置之后,很多机器学习公式都会变得简单很多。
二、什么是矩阵转置
假设有一个矩阵:
python
A =
[
[1 2 3]
[4 5 6]
]
矩阵形状:
(2,3)
表示:
2行
3列
其转置记作:
Aᵀ
结果:
python
[
[1 4]
[2 5]
[3 6]
]
此时形状变为:
(3,2)
即:
原来的行
变成列
原来的列
变成行
三、转置的定义
数学定义:
如果矩阵:
A(i,j)
表示:
第i行
第j列
那么:
Aᵀ(j,i)
表示:
第j行
第i列
即:
交换坐标
规则:
(i,j)
↓
(j,i)
四、转置示例
矩阵:
[
[1 2]
[3 4]
]
转置:
[
[1 3]
[2 4]
]
矩阵:
[
[1 2 3]
]
转置:
[
[1]
[2]
[3]
]
可以看到:
行向量
变成列向量
五、为什么需要转置
假设:
学生成绩表:
[
[90 85 88]
[95 92 96]
]
表示:
2个学生
3门课程
如果转置:
[
[90 95]
[85 92]
[88 96]
]
则表示:
3门课程
2个学生
因此:
转置本质是切换观察数据的角度
六、矩阵转置流程

七、手写实现矩阵转置
原矩阵:
python
A = [
[1,2,3],
[4,5,6]
]
转置实现:
python
rows = len(A)
cols = len(A[0])
result = []
for j in range(cols):
row = []
for i in range(rows):
row.append(A[i][j])
result.append(row)
print(result)
输出:
[
[1,4],
[2,5],
[3,6]
]
八、使用列表推导式实现
代码更加简洁:
python
A = [
[1,2,3],
[4,5,6]
]
result = [
[row[i] for row in A]
for i in range(len(A[0]))
]
print(result)
输出:
[
[1,4],
[2,5],
[3,6]
]
九、NumPy实现转置
NumPy提供:
.T
属性。
示例:
python
import numpy as np
A = np.array([
[1,2,3],
[4,5,6]
])
print(A.T)
输出:
[
[1 4]
[2 5]
[3 6]
]
查看形状:
print(A.shape)
输出:
(2,3)
转置后:
print(A.T.shape)
输出:
(3,2)
十、transpose()函数
除了:
A.T
还可以:
np.transpose(A)
示例:
python
import numpy as np
A = np.array([
[1,2],
[3,4]
])
print(np.transpose(A))
结果:
[
[1 3]
[2 4]
]
十一、一维数组转置陷阱
很多人第一次会写:
python
arr = np.array([
1,
2,
3
])
print(arr.T)
结果:
[1 2 3]
发现:
没有变化
原因:
一维数组没有行列概念
形状:
(3,)
转置后仍然:
(3,)
正确写法:
python
arr = np.array([
[1],
[2],
[3]
])
形状:
(3,1)
转置:
(1,3)
十二、矩阵乘法中的转置
假设:
A.shape
(2,3)
B.shape
(2,3)
无法相乘:
3 ≠ 2
报错。
解决方法:
A @ B.T
此时:
(2,3)
×
(3,2)
合法。
结果:
(2,2)
十三、协方差矩阵中的转置
机器学习中经常看到:
XᵀX
例如:
最小二乘法:
β
=
(XᵀX)^(-1)
Xᵀy
这里:
Xᵀ
就是特征矩阵转置
十四、PCA中的转置
主成分分析:
协方差矩阵:
Cov
=
XᵀX
/
(n-1)
因此:
转置
是PCA的重要基础
十五、神经网络中的转置
假设:
输入:
X.shape
(100,784)
权重:
W.shape
(128,784)
需要计算:
X @ W.T
此时:
(100,784)
×
(784,128)
得到:
(100,128)
神经网络大量使用这种技巧。
十六、三维数组转置
二维矩阵:
A.T
即可。
三维数组:
arr.shape
(2,3,4)
使用:
arr.transpose(
1,
0,
2
)
结果:
(3,2,4)
表示:
交换第0轴
和第1轴
十七、转置与 reshape 的区别
很多人容易混淆:
reshape()
和:
transpose()
reshape:
改变数据排列方式
例如:
(2,6)
↓
(3,4)
transpose:
交换维度顺序
例如:
(2,3)
↓
(3,2)
十八、转置的数学性质
性质1:
(Aᵀ)ᵀ
=
A
转置两次回到原矩阵。
性质2:
(A+B)ᵀ
=
Aᵀ+Bᵀ
性质3:
(AB)ᵀ
=
BᵀAᵀ
注意:
顺序反过来
这是考试和面试高频题。
十九、机器学习中的典型应用
转置常见于:
最小二乘法
线性回归
逻辑回归
协方差矩阵
PCA
SVD
神经网络反向传播
Transformer注意力机制
几乎所有线性代数算法都会用到。
二十、总结
矩阵转置是线性代数中最基础也是最重要的操作之一。
核心思想:
行变列
列变行
数学规则:
(i,j)
↓
(j,i)
NumPy实现:
A.T
或者:
np.transpose(A)
应用场景:
矩阵乘法
最小二乘法
PCA
协方差矩阵
神经网络
Transformer
可以这样理解:
矩阵转置
并没有改变数据本身
它只是改变了观察数据的方式
而这种"换个角度看数据"的能力,正是现代机器学习和数据科学中许多算法得以成立的重要基础。