在 Python 中,可以使用 NumPy 库的 reshape() 方法来改变矩阵(多维数组)的形状,以下是详细说明和示例:

基本语法
numpy.reshape(a, newshape, order='C')
- 参数:
a:要重塑的数组(矩阵)。newshape:新的形状(可以是整数元组或单个整数)。order:重塑的顺序(可选),默认为'C'(按行优先,类似 C 语言),'F'表示按列优先(类似 Fortran 语言)。
示例代码
示例 1:基本重塑
import numpy as np
# 创建一个 1D 数组
arr = np.array([1, 2, 3, 4, 5, 6])
print("原始数组:", arr)
# 重塑为 2x3 矩阵
reshaped_arr = np.reshape(arr, (2, 3))
print("重塑后的矩阵:\n", reshaped_arr)
输出:
原始数组: [1 2 3 4 5 6]
重塑后的矩阵:
[[1 2 3]
[4 5 6]]
示例 2:自动推断维度
如果新形状中有一个维度为 -1,NumPy 会自动计算该维度的大小:
arr = np.array([1, 2, 3, 4, 5, 6])
# 自动推断为 3x2
reshaped_arr = np.reshape(arr, (3, -1))
print("自动推断的形状:\n", reshaped_arr)
输出:
自动推断的形状:
[[1 2]
[3 4]
[5 6]]
示例 3:高维重塑
arr = np.arange(8) # [0, 1, 2, 3, 4, 5, 6, 7]
# 重塑为 2x2x2
reshaped_arr = np.reshape(arr, (2, 2, 2))
print("3D 矩阵:\n", reshaped_arr)
输出:

3D 矩阵:
[[[0 1]
[2 3]]
[[4 5]
[6 7]]]
示例 4:顺序参数('C' vs 'F')
arr = np.array([1, 2, 3, 4, 5, 6])
# 行优先(C 风格,默认)
c_order = np.reshape(arr, (2, 3), order='C')
print("行优先:\n", c_order)
# 列优先(F 风格)
f_order = np.reshape(arr, (2, 3), order='F')
print("列优先:\n", f_order)
输出:
行优先:
[[1 2 3]
[4 5 6]]
列优先:
[[1 3 5]
[2 4 6]]
注意事项
-
元素总数不变:重塑前后数组的元素总数必须相同,6 个元素不能重塑为 2x4(需要 8 个元素)。
# 会报错:ValueError: cannot reshape array of size 6 into shape (2,4) np.reshape(arr, (2, 4))
-
视图 vs 副本:
reshape()通常返回一个视图(共享内存),修改新数组会影响原数组。- 如果需要副本,使用
copy=True(但reshape()默认不复制)。
-
原数组修改的影响:
(图片来源网络,侵删)arr = np.array([1, 2, 3, 4]) reshaped = np.reshape(arr, (2, 2)) reshaped[0, 0] = 99 print("原数组:", arr) # 原数组也被修改
替代方法
arr.reshape():直接调用数组的reshape方法(更简洁)。reshaped = arr.reshape(2, 3)
np.resize():如果新形状更大,会填充重复值(与reshape不同)。np.resize(arr, (3, 3)) # 填充 [1,2,3,4,1,2,3,4,1]
- 使用
numpy.reshape()或arr.reshape()改变矩阵形状。 - 确保元素总数匹配,否则会报错。
- 注意
order参数控制重塑顺序(行优先/列优先)。 - 默认返回视图,避免意外修改原数组。
