NumPy中数组的转置Transpose的三种方法

 更新时间:2026年04月17日 10:01:33   作者:林深时见鹿1  
本文主要介绍了NumPy中数组转置的基本概念、方法、应用场景及注意事项,针对二维与高维数组,提供了多种转置方法,包括T、transpose、np.transpose,下面就来详细的了解一下

一、数组转置的核心定义

转置是指调整数组维度的顺序,并重新排列元素的存储位置:

  • 对二维数组(矩阵):转置就是 “行变列、列变行”(最直观的场景);
  • 对高维数组(三维 / 四维):转置是按指定顺序重新排列维度(比如将 (维度0, 维度1, 维度2) 转为 (维度2, 维度1, 维度0))。

NumPy 中实现转置的核心方式有 3 种(等价但适用场景不同):

方式语法特点
数组属性 Tarr.T最简洁,适合二维数组快速转置
方法 transpose()arr.transpose(axes)灵活,可指定高维数组的维度顺序
函数 np.transpose()np.transpose(arr, axes)等价于 arr.transpose(),函数式写法

二、基础用法:二维数组转置(最常用)

二维数组转置是日常开发中最常见的场景,对应数学中的 “矩阵转置”。

示例 1:用arr.T快速转置(推荐)

import numpy as np
# 原始二维数组(2行3列)
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
print("原始数组:\n", arr_2d)
print("原始形状:", arr_2d.shape)  # (2, 3)
# 转置(行变列、列变行)
arr_T = arr_2d.T
print("\n转置后数组:\n", arr_T)
print("转置后形状:", arr_T.shape)  # (3, 2)

输出结果

原始数组:
 [[1 2 3]
 [4 5 6]]
原始形状: (2, 3)
 
转置后数组:
 [[1 4]
 [2 5]
 [3 6]]
转置后形状: (3, 2)

示例 2:用transpose()转置(等价于T)

# 二维数组转置时,transpose() 无参数等价于 arr.T
arr_trans = arr_2d.transpose()
print("transpose() 转置结果:\n", arr_trans)  # 和 arr.T 完全一致

三、进阶用法:高维数组转置(核心是维度顺序)

高维数组(三维 / 四维)的转置不再是简单的 “行变列”,而是按指定的维度顺序重新排列,这是新手最易混淆的点。

先明确:高维数组的维度编号

NumPy 数组的维度从 0 开始编号,比如:

  • 三维数组形状 (2, 3, 4) → 维度 0=2、维度 1=3、维度 2=4;
  • 可理解为:(样本数, 行数, 列数)(通道数, 高度, 宽度)(图像场景)。

示例 1:三维数组转置(默认顺序)

transpose() 无参数时,高维数组会反转维度顺序(比如 (0,1,2)(2,1,0)):

import numpy as np
# 原始三维数组:形状 (2, 3, 4) → 维度0=2,维度1=3,维度2=4
arr_3d = np.arange(24).reshape(2, 3, 4)
print("原始三维数组:\n", arr_3d)
print("原始形状:", arr_3d.shape)  # (2, 3, 4)
# 无参数转置:维度顺序反转 (2,1,0) → 形状 (4, 3, 2)
arr_3d_T = arr_3d.transpose()
print("\n转置后形状:", arr_3d_T.shape)  # (4, 3, 2)

示例 2:指定维度顺序转置(核心!)

通过 transpose(axes) 参数指定维度顺序,实现灵活的维度调整:

import numpy as np
arr_3d = np.arange(24).reshape(2, 3, 4)  # 维度0=2,维度1=3,维度2=4
# 需求:将维度顺序改为 (1, 0, 2) → 形状 (3, 2, 4)
arr_3d_trans1 = arr_3d.transpose(1, 0, 2)
print("维度顺序 (1,0,2) → 形状:", arr_3d_trans1.shape)  # (3, 2, 4)
# 需求:将维度顺序改为 (0, 2, 1) → 形状 (2, 4, 3)
arr_3d_trans2 = arr_3d.transpose(0, 2, 1)
print("维度顺序 (0,2,1) → 形状:", arr_3d_trans2.shape)  # (2, 4, 3)

实战场景:图像数据转置(计算机视觉)

图像数据常见维度顺序有两种:

  • (高度, 宽度, 通道)(HWC,如 PIL/OpenCV);
  • (通道, 高度, 宽度)(CHW,如 PyTorch)。

转置可快速切换这两种格式:

import numpy as np
# 模拟图像数据:2张图片 × 32高度 × 32宽度 × 3通道(HWC格式,形状 (2,32,32,3))
img_hwc = np.random.randint(0, 255, (2, 32, 32, 3))
print("HWC格式形状:", img_hwc.shape)  # (2, 32, 32, 3)
# 转置为CHW格式:维度顺序 (0, 3, 1, 2) → 形状 (2, 3, 32, 32)
img_chw = img_hwc.transpose(0, 3, 1, 2)
print("CHW格式形状:", img_chw.shape)  # (2, 3, 32, 32)

四、转置的核心特性:视图(共享内存)

reshape(-1) 类似,转置返回的是原数组的视图(View),而非新数组 —— 修改转置后的数组,会同步修改原数组(核心避坑点!)。

示例:验证共享内存

import numpy as np
arr = np.array([[1, 2], [3, 4]])
arr_T = arr.T  # 转置视图
# 修改转置后的数组
arr_T[0, 1] = 99
print("转置数组修改后:\n", arr_T)
print("原数组同步修改:\n", arr)  # 原数组的 [1,1] 位置变为99

输出结果

转置数组修改后:
 [[ 1 99]
 [ 2  4]]
原数组同步修改:
 [[ 1  2]
 [99  4]]

解决方法:若需要独立的转置数组,添加 .copy()

arr_T_indep = arr.T.copy()
arr_T_indep[0,1] = 0
print("独立转置数组修改后,原数组:\n", arr)  # 原数组不变

五、转置的常见应用场景

场景 1:矩阵运算(线性代数)

矩阵乘法要求 “第一个矩阵的列数 = 第二个矩阵的行数”,转置是调整维度的关键:

import numpy as np
# 矩阵A:2行3列
A = np.array([[1,2,3], [4,5,6]])
# 矩阵B:3行2列(A的转置)
B = A.T
# 矩阵乘法:A × B → 2行2列
C = np.dot(A, B)
print("A × A.T 的结果:\n", C)

场景 2:数据按列 / 行统计

转置可将 “按行存储” 的数据转为 “按列存储”,方便统计:

import numpy as np
# 原始数据:31天×24小时温度(按行存储,每行是1天)
temp = np.random.normal(5, 6, (31, 24)).round(1)
# 需求:统计每小时的平均温度(按列统计)
# 方法1:直接按列统计
hour_mean1 = temp.mean(axis=0)
# 方法2:转置后按行统计(等价)
hour_mean2 = temp.T.mean(axis=1)
print("每小时平均温度(方法1):", hour_mean1[:5])
print("每小时平均温度(方法2):", hour_mean2[:5])  # 结果一致

场景 3:广播配合转置

转置可调整数组形状,让广播更灵活:

import numpy as np
# 数组A:2行3列
A = np.array([[1,2,3], [4,5,6]])
# 数组B:2个元素(想按列和A相加)
B = np.array([10, 20])
# 直接相加:B会被广播为(2,1),和A的(2,3)相加 → 每行加对应值
# 需求:每列加对应值 → 先转置A,相加后再转置
A_T = A.T + B  # A.T是(3,2),B是(2,) → 广播为(3,2),逐行相加
A_new = A_T.T
print("每列加对应值的结果:\n", A_new)

输出结果

每列加对应值的结果:
 [[11 12 13]
 [24 25 26]]

六、避坑点与最佳实践

1. 核心避坑点

  • ❌ 误区:转置会创建新数组(实际是视图,共享内存,需独立则加 .copy());
  • ❌ 误区:高维数组转置无参数时和二维一样(实际是反转维度顺序);
  • ❌ 错误:指定无效的维度顺序(如三维数组指定 transpose(3,1,2),维度编号超出范围);
  • ❌ 混淆:转置和 reshape(转置改变元素排列,reshape 仅改变形状,元素顺序不变)。

2. 最佳实践

  • ✅ 二维数组转置优先用 arr.T(简洁高效);
  • ✅ 高维数组转置明确维度顺序(如 transpose(0,3,1,2)),避免依赖默认反转;
  • ✅ 需独立数组时,转置后加 .copy();
  • ✅ 验证转置结果:通过 shape 属性检查维度是否符合预期。

总结

  1. 数组转置核心是调整维度顺序:二维数组是 “行变列”,高维数组是按指定顺序重排维度;
  2. 实现方式:arr.T(二维首选)、arr.transpose(axes)(高维灵活)、np.transpose()(函数式);
  3. 核心特性:转置返回视图(共享内存),修改会同步影响原数组,需独立则加 .copy();
  4. 常用场景:矩阵运算、图像格式转换、广播配合调整维度、按列 / 行统计数据;
  5. 避坑关键:区分转置和 reshape,高维转置明确维度顺序,验证形状是否符合预期。

到此这篇关于NumPy中数组的转置Transpose的三种方法的文章就介绍到这了,更多相关NumPy数组转置Transpose内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Python实现银行卡识别的示例代码

    基于Python实现银行卡识别的示例代码

    银行卡识别是一个在金融、安全等领域具有重要应用的问题,本文主要为大家介绍了如何使用Python和深度学习技术来实现银行卡识别功能,需要的可以参考下
    2024-03-03
  • PyInstaller安装包瘦身指南

    PyInstaller安装包瘦身指南

    直接pyinstaller打包的话,如果当前pip环境安装的库较多的话,会导致生成的可执行exe程序文件过大,本文详细的介绍了PyInstaller安装包瘦身的过程,感兴趣的可以了解一下
    2023-03-03
  • python实现串口通信的示例代码

    python实现串口通信的示例代码

    python实现串口通信是一件简单的事情,只要通过pyserial模块就可以实现,本文主要介绍了python实现串口通信的示例代码,感兴趣的可以了解一下
    2023-10-10
  • 使用Python自制一个回收站清理器

    使用Python自制一个回收站清理器

    经常笔记本电脑的回收站存储了很多的文件,需要打开回收站全部选中进行清理。这篇文章将使用Python自制一个回收站清理器,需要的可以参考一下
    2023-03-03
  • python argparser的具体使用

    python argparser的具体使用

    这篇文章主要介绍了python argparser的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Python通过dxfgrabber库实现获取CAD信息

    Python通过dxfgrabber库实现获取CAD信息

    dxfgrabber 是一个 Python 库,用于读取和解析 AutoCAD DXF(Drawing Exchange Format)文件,本文就来教教大家如何利用dxfgrabber库实现获取CAD信息吧
    2023-06-06
  • Python数据分析之获取双色球历史信息的方法示例

    Python数据分析之获取双色球历史信息的方法示例

    这篇文章主要介绍了Python数据分析之获取双色球历史信息的方法,涉及Python网页抓取、正则匹配、文件读写及数值运算等相关操作技巧,需要的朋友可以参考下
    2018-02-02
  • python 5个实用的技巧

    python 5个实用的技巧

    这篇文章主要介绍了python 5个实用的技巧,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-09-09
  • Python爬虫之App爬虫视频下载的实现

    Python爬虫之App爬虫视频下载的实现

    这篇文章主要介绍了Python爬虫之App爬虫视频下载的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • pandas数据合并之pd.concat()用法详解

    pandas数据合并之pd.concat()用法详解

    本文主要介绍了pandas数据合并之pd.concat()用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论