Numpy 之 reshape 教程
Numpy reshape
教程
1. 基本介绍
reshape
是 Numpy 数组对象(ndarray
)的一个方法,用于改变数组的形状(维度),但不改变其数据内容。常用于数据预处理、矩阵运算等场景。
语法:
ndarray.reshape(newshape, order='C')
newshape
:新形状,可以是整数或元组(如(2, 3)
)。order
:可选,'C' 表示按行优先(默认),'F' 表示按列优先。
2. 参数详解
- -1:自动推断该维度的大小,Numpy 会根据数组总元素个数自动计算。
- 正整数:指定该维度的大小。
注意:
新形状的元素总数必须与原数组一致,否则会报错。
3. 常见用法举例
3.1 一维转二维
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
b = a.reshape(2, 3) # 2行3列
print(b)
# 输出:
# [[1 2 3]
# [4 5 6]]
3.2 使用 -1 自动推断
a = np.array([1, 2, 3, 4, 5, 6])
b = a.reshape(-1, 2) # 自动计算行数
print(b)
# 输出:
# [[1 2]
# [3 4]
# [5 6]]
3.3 转为列向量/行向量
a = np.array([1, 2, 3, 4])
col_vec = a.reshape(-1, 1) # 4行1列,列向量
row_vec = a.reshape(1, -1) # 1行4列,行向量
print(col_vec)
# [[1]
# [2]
# [3]
# [4]]
print(row_vec)
# [[1 2 3 4]]
3.4 高维数组变形
# 创建一个包含0-23的一维数组
a = np.arange(24) # [0, 1, 2, ..., 23]# 将一维数组重塑为三维数组
# 参数(2, 3, 4)的含义:
# - 2: 第一维,表示有2个矩阵
# - 3: 第二维,每个矩阵有3行
# - 4: 第三维,每个矩阵有4列
# 最终得到2个3×4的矩阵,总共24个元素
b = a.reshape(2, 3, 4) # 打印数组形状,验证维度
print("数组形状:", b.shape) # 输出: (2, 3, 4)# 打印数组内容,便于理解
print("数组内容:")
print(b)
# 输出类似:
# [[[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
#
# [[12 13 14 15]
# [16 17 18 19]
# [20 21 22 23]]]
4. 常见错误与注意事项
- 元素总数不一致会报错:
a = np.array([1, 2, 3, 4]) # a.reshape(3, 2) # 报错:不能reshape为6个元素
- reshape 返回新数组,原数组不变(除非用
a.shape = ...
) - 可以链式调用:
a = np.arange(12) b = a.reshape(3, 4).T # 先变3x4,再转置
5. 实战场景
- 批量数据处理:如将一维数据转为二维特征矩阵
- 图像处理:如将一维像素流reshape为二维图片
- 深度学习:如批量输入(batch)reshape为 (batch_size, features)
6. 进阶技巧
- 恢复原形状:可以用
reshape(-1)
或flatten()
将多维数组拉平成一维 - order 参数:
order='F'
按列优先(Fortran风格),如在某些科学计算场景下使用
7. 总结
reshape
是数据预处理和矩阵运算中非常常用的工具- 合理使用
-1
可以大大简化代码 - 注意元素总数必须一致
如需更多实际案例或有特定场景需求,欢迎继续提问!