NumPy 中文教程

第一部分:基础认知与环境准备
第 1 章 全面认识 NumPy
第 2 章 开发环境搭建与验证
第二部分:核心对象 ——ndarray 数组
第 3 章 ndarray 数组基础
第 4 章 数组的形状与维度操作
第四部分:高级应用与数据处理
第 8 章 数组的排序、查找与去重
第 9 章 缺失值与异常值处理
第 10 章 随机数生成与抽样
第 11 章 文件读写与数据交互
第五部分:实战场景与落地应用
第 12 章 数值计算实战
第 13 章 数据分析实战
第六部分:优化进阶与问题解决
第 14 章 NumPy 性能优化
第 15 章 NumPy 进阶扩展
第 16 章 常见问题与解决方案

4.3 数组的转置与轴交换

NumPy数组转置与轴交换全面教程:从基础转置(.T)到高维数组应用

NumPy 中文教程

本教程详细介绍了NumPy中数组转置与轴交换的核心方法,涵盖基础转置(.T)、np.transpose()、swapaxes()函数,并解释在高维数组和矩阵运算中的应用,通过简单示例帮助初学者快速掌握。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

NumPy数组转置与轴交换教程

介绍

NumPy是Python中用于科学计算的核心库,提供了高效的多维数组对象。数组的转置和轴交换是数据操作中的基础技能,常用于改变数组形状、准备数据或进行数学运算。本教程将一步步引导你学习这些操作,从基础概念到高级应用。

1. 基础转置(.T)

在NumPy中,每个数组都有一个.T属性,用于获取数组的转置。转置操作交换数组的行和列,对于二维数组来说,这是最常见的应用。

示例代码

import numpy as np

# 创建一个二维数组(矩阵)
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("原始数组:")
print(arr)
print("形状:", arr.shape)  # 输出: (2, 3)

# 使用.T属性转置
arr_transposed = arr.T
print("\n转置数组 (.T):")
print(arr_transposed)
print("形状:", arr_transposed.shape)  # 输出: (3, 2)

解释: 原始数组有2行3列,转置后变为3行2列。.T属性简单快捷,但仅限于二维或更高维数组。

2. np.transpose()

np.transpose()函数更灵活,可以用于任意维度的数组,并允许指定轴顺序。这对于高维数组特别有用。

用法

import numpy as np

# 二维数组示例
arr = np.array([[1, 2, 3], [4, 5, 6]])
transposed = np.transpose(arr)
print("np.transpose() 结果:")
print(transposed)  # 输出与.T相同

# 三维数组示例
arr_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print("\n三维原始数组:")
print(arr_3d)
print("形状:", arr_3d.shape)  # 输出: (2, 2, 2)

# 默认转置(交换所有轴)
transposed_3d = np.transpose(arr_3d)
print("\n默认转置:")
print(transposed_3d)
print("形状:", transposed_3d.shape)  # 输出: (2, 2, 2) 但轴顺序改变

# 指定轴顺序:将轴从(0,1,2)重新排列为(2,1,0)
custom_transposed = np.transpose(arr_3d, axes=(2, 1, 0))
print("\n指定轴顺序转置:")
print(custom_transposed)

解释: np.transpose()默认将所有轴反转(例如,对于二维数组,等价于.T)。通过axes参数,你可以自定义轴的顺序,这对于复杂数组操作非常有用。

3. 轴交换(swapaxes())

swapaxes()函数用于交换数组的两个轴,而不改变其他轴。它比np.transpose()更专注于特定轴的交换。

示例

import numpy as np

# 二维数组:交换轴0(行)和轴1(列)
arr = np.array([[1, 2, 3], [4, 5, 6]])
swapped = np.swapaxes(arr, 0, 1)
print("swapaxes(0, 1) 结果:")
print(swapped)  # 输出与.T相同

# 三维数组:交换轴0和轴2
arr_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
swapped_3d = np.swapaxes(arr_3d, 0, 2)
print("\n三维数组交换轴0和轴2:")
print(swapped_3d)
print("形状:", swapped_3d.shape)  # 输出: (2, 2, 2) 但轴顺序改变

解释: swapaxes()允许你只交换两个指定的轴,其他轴保持不变。这对于局部调整数组结构很方便。

4. 高维数组转置

高维数组(如三维、四维)的转置更复杂,但np.transpose()swapaxes()都能处理。关键在于理解轴的概念:轴0是第一个维度,轴1是第二个,依此类推。

实践示例

import numpy as np

# 创建一个三维数组(例如,表示多个二维矩阵)
arr_3d = np.random.rand(2, 3, 4)  # 形状: (2, 3, 4)
print("原始三维数组形状:", arr_3d.shape)

# 使用np.transpose()重新排列轴
# 例如,将轴顺序从(0,1,2)改为(2,0,1)
transposed_3d = np.transpose(arr_3d, axes=(2, 0, 1))
print("转置后形状:", transposed_3d.shape)  # 输出: (4, 2, 3)

# 使用swapaxes()交换特定轴
swapped_3d = np.swapaxes(arr_3d, 1, 2)  # 交换轴1和轴2
print("交换轴1和轴2后形状:", swapped_3d.shape)  # 输出: (2, 4, 3)

解释: 在高维中,转置相当于重新排列轴的顺序。例如,在图像处理中,可能需要将通道轴从最后调整到前面。

5. 转置在矩阵运算中的应用

转置在线性代数和数据科学中至关重要。例如,在矩阵乘法、求逆或计算协方差矩阵时经常用到。

矩阵乘法

在NumPy中,矩阵乘法可以使用@运算符或np.dot()。转置常用于对齐矩阵维度。

import numpy as np

# 定义两个矩阵
A = np.array([[1, 2], [3, 4]])  # 2x2
B = np.array([[5, 6], [7, 8]])  # 2x2

# 计算 A * B^T(B的转置)
B_transposed = B.T  # 或使用 np.transpose(B)
result = np.dot(A, B_transposed)
print("A * B^T:")
print(result)

# 使用@运算符(Python 3.5+)
result_alt = A @ B.T
print("\n使用@运算符:")
print(result_alt)

其他应用

  • 求逆矩阵:在计算逆矩阵时,转置可能用于对称矩阵或伴随矩阵。

    # 示例:对称矩阵的转置不变
    symmetric_arr = np.array([[1, 2], [2, 3]])
    print("对称矩阵转置:", symmetric_arr.T)
    
  • 协方差矩阵:在统计学中,协方差矩阵计算常涉及转置操作。

    # 计算样本协方差矩阵
    data = np.array([[1, 2], [3, 4], [5, 6]])
    cov_matrix = np.cov(data.T)  # 转置以对齐维度
    print("协方差矩阵:\n", cov_matrix)
    
  • 数据预处理:在机器学习中,转置数据以适应模型输入,例如在图像分类中调整通道顺序。

总结

本教程覆盖了NumPy中数组转置与轴交换的核心方法:

  • 基础转置 (.T):简单快捷,适合二维数组。
  • np.transpose():灵活强大,可处理高维数组并指定轴顺序。
  • swapaxes():专注于交换两个轴,适用于局部调整。

通过示例代码,你学会了如何在不同场景下应用这些操作。转置不仅是数学运算的基础,还在数据科学中广泛应用。练习时,尝试操作不同形状的数组,加深理解。

进一步学习:探索NumPy文档中的reshape()ravel()等函数,它们与转置结合可以更高效地处理数据。祝你学习愉快!

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包