当前位置: 首页 > news >正文

numpy学习笔记5:arr.T 是数组的转置属性详细解释

numpy学习笔记5:arr.T 是数组的转置属性详细解释

在 NumPy 中,.T 是数组的转置属性,用于交换数组的维度顺序。它的行为取决于数组的维度(ndim)。以下是详细解释:


1. 二维数组(矩阵)的转置

对二维数组(矩阵),.T 会交换行和列。

示例
import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6]])
print("原数组:\n", arr)
print("转置后的数组:\n", arr.T)

输出

复制

原数组:[[1 2 3][4 5 6]]转置后的数组:[[1 4][2 5][3 6]]
形状变化
  • 原数组形状:(2, 3)(2 行,3 列)

  • 转置后形状:(3, 2)(3 行,2 列)


2. 一维数组的转置

一维数组的 .T 不会改变形状(因为一维数组只有一个轴)。

示例
arr_1d = np.array([1, 2, 3])
print("原数组:", arr_1d)
print("转置后的数组:", arr_1d.T)

输出

原数组: [1 2 3]
转置后的数组: [1 2 3]
转置一维数组的正确方法

若需要将一维数组转换为列向量,使用 reshape

column_vector = arr_1d.reshape(-1, 1)  # 形状 (3, 1)

3. 高维数组(三维及以上)的转置

对高维数组,.T 默认会反转所有维度的顺序。
更灵活的操作可以通过 np.transpose() 指定轴的交换顺序。

示例(三维数组)
arr_3d = np.arange(24).reshape(2, 3, 4)  # 形状 (2, 3, 4)
print("原数组形状:", arr_3d.shape)
print("转置后的形状:", arr_3d.T.shape)  # 默认反转维度 → (4, 3, 2)
自定义转置顺序

使用 np.transpose(axes) 指定轴的顺序:

# 将形状 (2,3,4) 转为 (3,4,2)
transposed = np.transpose(arr_3d, axes=(1, 2, 0))
print("转置后形状:", transposed.shape)  # (3, 4, 2)

4. 核心特性

(1) 视图(View)而非拷贝
  • .T 返回的是原数组的视图(共享内存),修改转置数组会影响原数组。

    arr = np.array([[1, 2], [3, 4]])
    arr_T = arr.T
    arr_T[0, 1] = 100  # 修改转置数组
    print("原数组:\n", arr)  # 输出 [[1, 2], [100, 4]]
(2) 内存布局
  • 转置后的数组可能不再是连续内存(C 顺序),影响计算效率。可通过 .copy() 强制连续存储:

    arr_T_contiguous = arr.T.copy()

5. 应用场景

(1) 矩阵乘法
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
result = A @ B.T  # 计算 A 和 B 转置的矩阵乘法
(2) 数据重塑
# 将图像数据 (高度, 宽度, 通道) 转为 (通道, 高度, 宽度)
image = np.random.rand(256, 256, 3)
image_transposed = image.transpose(2, 0, 1)
(3) 数学运算
# 计算协方差矩阵(需转置数据矩阵)
data = np.random.rand(100, 5)  # 100 个样本,5 个特征
covariance = np.cov(data.T)    # 形状 (5, 5)

6. 对比其他函数

操作说明示例
.T转置所有维度(反转轴顺序)arr_3d.T → 反转维度顺序
np.transpose()自定义轴的交换顺序np.transpose(arr, (1,0,2))
reshape()改变形状但不重新排列数据arr.reshape(3, 2)

总结

  • 二维数组.T 直接交换行和列。

  • 高维数组:默认反转所有维度顺序,需 np.transpose() 灵活控制。

  • 一维数组:转置无意义,需用 reshape 转换为行/列向量。


http://www.mrgr.cn/news/95029.html

相关文章:

  • Blender4.3雕刻笔刷简介
  • numpy学习笔记8:数组属性和基础操作的详细描述
  • 20. Excel 自动化:Excel 对象模型
  • 《TCP/IP网络编程》学习笔记 | Chapter 19:Windows 平台下线程的使用
  • 深度学习框架PyTorch——从入门到精通(6.1)自动微分
  • 股票查询系统
  • nginx配置反向代理数据库等插件的原理和方式
  • ngx_url_t
  • C语音组播收发
  • numpy学习笔记2:ones = np.ones((2, 4)) 的详解
  • ASP4644四通道降压稳压器的工业高效电源管理方案
  • numpy学习笔记6:np.sin(a) 的详细解释
  • 卷积神经网络 - 卷积层
  • 日常用命令
  • JavaScript变量声明与DOM操作指南
  • 安全地自动重新启动 Windows 资源管理器Bat脚本
  • Unity 云渲染本地部署方案
  • LeetCode[142] 环形链表 II
  • JAVA中关于图形化界面的学习(GUI)动作监听,鼠标监听,键盘监听
  • 【Java】链表(LinkedList)(图文版)