numpy学习笔记5:arr.T 是数组的转置属性详细解释
numpy学习笔记5:arr.T 是数组的转置属性详细解释
在 NumPy 中,.T
是数组的转置属性,用于交换数组的维度顺序。它的行为取决于数组的维度(ndim
)。以下是详细解释:
1. 二维数组(矩阵)的转置
对二维数组(矩阵),.T
会交换行和列。
示例:
import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6]]) print("原数组:\n", arr) print("转置后的数组:\n", arr.T)
输出:
复制
原数组:[[1 2 3][4 5 6]]转置后的数组:[[1 4][2 5][3 6]]
形状变化:
-
原数组形状:
(2, 3)
(2 行,3 列) -
转置后形状:
(3, 2)
(3 行,2 列)
2. 一维数组的转置
一维数组的 .T
不会改变形状(因为一维数组只有一个轴)。
示例:
arr_1d = np.array([1, 2, 3]) print("原数组:", arr_1d) print("转置后的数组:", arr_1d.T)
输出:
原数组: [1 2 3] 转置后的数组: [1 2 3]
转置一维数组的正确方法:
若需要将一维数组转换为列向量,使用 reshape
:
column_vector = arr_1d.reshape(-1, 1) # 形状 (3, 1)
3. 高维数组(三维及以上)的转置
对高维数组,.T
默认会反转所有维度的顺序。
更灵活的操作可以通过 np.transpose()
指定轴的交换顺序。
示例(三维数组):
arr_3d = np.arange(24).reshape(2, 3, 4) # 形状 (2, 3, 4) print("原数组形状:", arr_3d.shape) print("转置后的形状:", arr_3d.T.shape) # 默认反转维度 → (4, 3, 2)
自定义转置顺序:
使用 np.transpose(axes)
指定轴的顺序:
# 将形状 (2,3,4) 转为 (3,4,2) transposed = np.transpose(arr_3d, axes=(1, 2, 0)) print("转置后形状:", transposed.shape) # (3, 4, 2)
4. 核心特性
(1) 视图(View)而非拷贝:
-
.T
返回的是原数组的视图(共享内存),修改转置数组会影响原数组。arr = np.array([[1, 2], [3, 4]]) arr_T = arr.T arr_T[0, 1] = 100 # 修改转置数组 print("原数组:\n", arr) # 输出 [[1, 2], [100, 4]]
(2) 内存布局:
-
转置后的数组可能不再是连续内存(C 顺序),影响计算效率。可通过
.copy()
强制连续存储:arr_T_contiguous = arr.T.copy()
5. 应用场景
(1) 矩阵乘法:
A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) result = A @ B.T # 计算 A 和 B 转置的矩阵乘法
(2) 数据重塑:
# 将图像数据 (高度, 宽度, 通道) 转为 (通道, 高度, 宽度) image = np.random.rand(256, 256, 3) image_transposed = image.transpose(2, 0, 1)
(3) 数学运算:
# 计算协方差矩阵(需转置数据矩阵) data = np.random.rand(100, 5) # 100 个样本,5 个特征 covariance = np.cov(data.T) # 形状 (5, 5)
6. 对比其他函数
操作 | 说明 | 示例 |
---|---|---|
.T | 转置所有维度(反转轴顺序) | arr_3d.T → 反转维度顺序 |
np.transpose() | 自定义轴的交换顺序 | np.transpose(arr, (1,0,2)) |
reshape() | 改变形状但不重新排列数据 | arr.reshape(3, 2) |
总结
-
二维数组:
.T
直接交换行和列。 -
高维数组:默认反转所有维度顺序,需
np.transpose()
灵活控制。 -
一维数组:转置无意义,需用
reshape
转换为行/列向量。