趋近智
让我们来看看另一个基本矩阵运算:转置。矩阵的加法、减法和标量乘法都涉及元素级别的计算,而转置则是一种结构性操作。它通过沿其主对角线翻转来重新排列矩阵的元素。这看起来可能只是一种简单的变换,但在机器学习的各种数据处理任务和数学公式中,它却出奇地有用。
矩阵的转置是通过交换其行和列获得的。如果你有一个矩阵 ,它的转置记作 。 的第一行变为 的第一列, 的第二行变为 的第二列,依此类推。
更正式地讲,如果 是一个 矩阵(意味着它有 行和 列),那么它的转置 将是一个 矩阵。矩阵 中第 行第 列的元素(记作 )变为 中第 行第 列的元素。我们可以将这种关系表示为:
让我们来看一个具体例子。考虑以下 矩阵 :
为了求其转置 ,我们取第一行 并使其成为第一列。然后取第二行 并使其成为第二列。得到的矩阵 是一个 的矩阵:
注意维度是如何从 翻转为 的。元素 (即 0)移动到了位置 。元素 (即 9)移动到了位置 。
NumPy 使计算转置变得非常直接。你可以使用 NumPy 数组的 .T 属性或 numpy.transpose() 函数。
让我们在 NumPy 中尝试我们的示例矩阵 :
import numpy as np
# 定义矩阵 A
A = np.array([
[5, 0, 7],
[1, -2, 9]
])
print("原始矩阵 A:")
print(A)
print("A 的形状:", A.shape)
# 使用 .T 属性计算转置
A_transpose = A.T
print("\n转置 A^T:")
print(A_transpose)
print("A^T 的形状:", A_transpose.shape)
# 你也可以使用 np.transpose() 函数
A_transpose_func = np.transpose(A)
print("\n使用 np.transpose(A) 进行转置:")
print(A_transpose_func)
print("形状:", A_transpose_func.shape)
运行此代码将生成:
Original Matrix A:
[[ 5 0 7]
[ 1 -2 9]]
Shape of A: (2, 3)
Transpose A^T:
[[ 5 1]
[ 0 -2]
[ 7 9]]
Shape of A^T: (3, 2)
Transpose using np.transpose(A):
[[ 5 1]
[ 0 -2]
[ 7 9]]
Shape: (3, 2)
如你所见,两种方法都得到相同的结果,并且形状确认了维度已经交换。.T 属性通常更方便,因为它更简洁。
转置操作有几个有用的性质:
当你转置一个向量时会发生什么?请记住,我们通常将向量表示为列矩阵(一个 矩阵)或有时是行矩阵(一个 矩阵)。转置列向量会将其变为行向量,转置行向量则会将其变为列向量。
在 NumPy 中,如果你将向量表示为二维数组(其中一个维度的大小为 1),这会如预期般工作:
# 列向量 (3x1 矩阵)
col_vec = np.array([[10], [20], [30]])
print("列向量 (3x1):")
print(col_vec)
print("形状:", col_vec.shape)
# 转置为行向量 (1x3 矩阵)
row_vec = col_vec.T
print("\n转置为行向量 (1x3):")
print(row_vec)
print("形状:", row_vec.shape)
# 再次转置为列向量 (3x1 矩阵)
col_vec_again = row_vec.T
print("\n再次转置为列向量 (3x1):")
print(col_vec_again)
print("形状:", col_vec_again.shape)
Output:
Column Vector (3x1):
[[10]
[20]
[30]]
Shape: (3, 1)
Transposed to Row Vector (1x3):
[[10 20 30]]
Shape: (1, 3)
Transposed back to Column Vector (3x1):
[[10]
[20]
[30]]
Shape: (3, 1)
关于一维 NumPy 数组的重要说明: 如果你将向量表示为一维 NumPy 数组(例如,np.array([10, 20, 30])),直接应用 .T 属性没有效果。这是因为一维数组没有像二维数组那样严格的行和列可以交换。它的形状仅仅是 (n,)。
# 一维 NumPy 数组
vec_1d = np.array([10, 20, 30])
print("一维数组:", vec_1d)
print("形状:", vec_1d.shape)
print("应用 .T:", vec_1d.T) # 无变化
print("应用 .T 后的形状:", vec_1d.T.shape)
Output:
1D Array: [10 20 30]
Shape: (3,)
Applying .T: [10 20 30]
Shape after .T: (3,)
如果你需要将一维数组视为行向量或列向量进行矩阵乘法或明确转置等操作,你通常需要先使用 reshape(1, -1)(用于行向量)或 reshape(-1, 1)(用于列向量)等方法将其重塑为二维数组。
转置操作经常出现在线性代数公式和数据处理任务中:
掌握转置是理解机器学习中线性代数运作方式的又一步。它是一个应用广泛的简单概念。接下来,我们将处理最复杂的运算:矩阵乘法。
这部分内容有帮助吗?
numpy.transpose 函数的官方文档,展示了其在Python中对数组的使用方法。© 2026 ApX Machine Learning用心打造