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反射操作对象属性方法详解,在Python面对对象中,通过字符串的形式去操作对象的属性方法就称之为反射(在Python中一切事物都是可以为对象),需要的朋友可以参考下
    2023-08-08
  • sklearn中的交叉验证的实现(Cross-Validation)

    sklearn中的交叉验证的实现(Cross-Validation)

    这篇文章主要介绍了sklearn中的交叉验证的实现(Cross-Validation),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • python统计文本文件内单词数量的方法

    python统计文本文件内单词数量的方法

    这篇文章主要介绍了python统计文本文件内单词数量的方法,涉及Python针对文本文件及字符串的相关操作技巧,需要的朋友可以参考下
    2015-05-05
  • 基于OpenCV实现动态画矩形和多边形并保存坐标

    基于OpenCV实现动态画矩形和多边形并保存坐标

    这篇文章主要为大家详细介绍了如何利用OpenCV实现动态画矩形和多边形并保存坐标,文中的示例代码讲解详细,具有一定的参考价值,需要的可以参考一下
    2023-03-03
  • Python生成随机数详解流程

    Python生成随机数详解流程

    生成随机数一般使用的就是random模块下的函数,生成的随机数并不是真正意义上的随机数,而是对随机数的一种模拟。random模块包含各种伪随机数生成函数,以及各种根据概率分布生成随机数的函数。今天我们的目标就是摸清随机数有几种生成方式
    2022-03-03
  • Python环境隔离实战之venv/virtualenv与conda的差异与最佳实践

    Python环境隔离实战之venv/virtualenv与conda的差异与最佳实践

    Python虚拟环境到底是什么,它如何隔离依赖并工作,在实际开发中,我们该如何创建、使用和切换环境,以避免版本冲突,下面小编就带大家深入了解一下吧
    2025-08-08
  • python中的变量命名规则详情

    python中的变量命名规则详情

    这篇文章主要介绍了python中的变量命名规则详情,变量名可以包括字母、数字、下划线,但是数字不能做为开头,变量用的好或不好,和代码质量有着非常重要的联系,合理的使用变量,可以让你的代码可读性更高并且更加简洁,下面相关内容吧需要的小伙伴可以参考一下
    2022-03-03
  • Python常用的数据清洗方法详解

    Python常用的数据清洗方法详解

    这篇文章主要介绍了Python常用的数据清洗方法,在数据处理的过程中,一般都需要进行数据的清洗工作,如数据集是否存在重复、是否存在缺失、数据是否具有完整性和一致性、数据中是否存在异常值等,需要的朋友可以参考下
    2023-07-07
  • Python连接和操作Elasticsearch的详细指南

    Python连接和操作Elasticsearch的详细指南

    Elasticsearch 是一个强大的搜索引擎,广泛应用于数据存储和搜索场景,通过 Python,我们可以方便地与 Elasticsearch 进行交互,本文将详细介绍如何在本地使用 Python 连接到服务器上的 Elasticsearch,并进行基本的操作,需要的朋友可以参考下
    2024-12-12
  • python pygame实现五子棋小游戏

    python pygame实现五子棋小游戏

    这篇文章主要为大家详细介绍了python pygame实现五子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06

最新评论