杰瑞科技汇

python 矩阵 reshape

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

python 矩阵 reshape-图1
(图片来源网络,侵删)

基本语法

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)

输出

python 矩阵 reshape-图2
(图片来源网络,侵删)
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]]

注意事项

  1. 元素总数不变:重塑前后数组的元素总数必须相同,6 个元素不能重塑为 2x4(需要 8 个元素)。

    # 会报错:ValueError: cannot reshape array of size 6 into shape (2,4)
    np.reshape(arr, (2, 4))
  2. 视图 vs 副本

    • reshape() 通常返回一个视图(共享内存),修改新数组会影响原数组。
    • 如果需要副本,使用 copy=True(但 reshape() 默认不复制)。
  3. 原数组修改的影响

    python 矩阵 reshape-图3
    (图片来源网络,侵删)
    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 参数控制重塑顺序(行优先/列优先)。
  • 默认返回视图,避免意外修改原数组。
分享:
扫描分享到社交APP
上一篇
下一篇