背景:记录一下numpy数组维度顺序操作
一、
具体示例
transpose
方法用于交换数组的轴,改变数组的维度顺序。方法的参数是一个代表新轴顺序的元组。
假设你有一个三维数组,其形状是 (a, b, c)
,即有 a
个块,每个块中有 b
行,每行有 c
列。transpose
方法的参数 (0, 2, 1)
意味着:
0
轴保持不变,仍然是a
2
轴变成新的第2个位置(即原来是列的轴,现在变成行的轴)1
轴变成新的第3个位置(即原来是行的轴,现在变成列的轴)
import numpy as npX = np.random.rand(2, 3, 4)
print("Original shape:", X.shape)# Original shape: (2, 3, 4)
X
的形状是 (2, 3, 4)
,意味着:
- 2个块
- 每个块有3行
- 每行有4列
我们对其应用 transpose(0, 2, 1)
:
X_transposed = X.transpose(0, 2, 1)
print("Transposed shape:", X_transposed.shape)# Transposed shape: (2, 4, 3)
X_transposed
的新形状是 (2, 4, 3)
,意味着:
- 2个块(第0个轴保持不变)
- 每个块有4行(原来的列数,现在变成行)
- 每行有3列(原来的行数,现在变成列)
二、对比维度顺序变化
具体变化如下:
-
原始数组(形状
(2, 3, 4)
):
[[ # 第一个块[x1, x2, x3, x4], # 第1行[x5, x6, x7, x8], # 第2行[x9, x10, x11, x12] # 第3行],[ # 第二个块[y1, y2, y3, y4], # 第1行[y5, y6, y7, y8], # 第2行[y9, y10, y11, y12] # 第3行]
]
-
转置后的数组(形状
(2, 4, 3)
):
[[ # 第一个块[x1, x5, x9], # 第1行(原来每列的第1个元素)[x2, x6, x10], # 第2行(原来每列的第2个元素)[x3, x7, x11], # 第3行(原来每列的第3个元素)[x4, x8, x12] # 第4行(原来每列的第4个元素)],[ # 第二个块[y1, y5, y9], # 第1行[y2, y6, y10], # 第2行[y3, y7, y11], # 第3行[y4, y8, y12] # 第4行]
]
三、应用场景
在时间序列分析或其他多维数据处理任务中,调整维度顺序可能是为了符合模型的输入格式。例如:
- 在 RNN 或 LSTM 网络中,输入数据通常需要形状为
(batch_size, time_steps, features)
,即批量大小、时间步数、特征数。 - 如果数据原始形状是
(batch_size, features, time_steps)
,我们需要使用transpose(0, 2, 1)
将其调整为正确的形状。
通过 transpose(0, 2, 1)
,我们可以灵活地调整数据的维度顺序,以适应各种模型和分析方法的需求。