PyTorch数据操作基础教程:从张量创建到高级运算

本文通过示例代码全面讲解PyTorch中张量的基本操作,包含创建、运算、广播机制、索引切片等核心功能,并提供完整的代码和输出结果。


1. 张量创建与基本属性

import torch# 创建连续数值张量
x = torch.arange(12, dtype=torch.float32)
print("原始张量:\n", x)
print("形状:", x.shape)
print("元素总数:", x.numel())# 创建全零/全一张量
zero = torch.zeros(2, 3, 4)
print("\n三维零张量:\n", zero)one = torch.ones(3, 4)
print("\n全一张量:\n", one)# 手动创建张量
a = torch.tensor([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
print("\n自定义张量:\n", a)

输出结果

原始张量:tensor([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11.])
形状: torch.Size([12])
元素总数: 12三维零张量:tensor([[[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]],[[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]]])全一张量:tensor([[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.]])自定义张量:tensor([[ 1,  2,  3,  4],[ 5,  6,  7,  8],[ 9, 10, 11, 12]])

2. 张量重塑与转置

x = x.reshape(3, 4)
print("重塑后的3x4张量:\n", x)
print("转置张量:\n", x.T)

输出结果

重塑后的3x4张量:tensor([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.]])
转置张量:tensor([[ 0.,  4.,  8.],[ 1.,  5.,  9.],[ 2.,  6., 10.],[ 3.,  7., 11.]])

3. 数学运算

# 矩阵减法
print("x - one:\n", x - one)# 指数运算
b = torch.exp(a)
print("\n指数运算结果:\n", b)

输出结果

x - one:tensor([[-1.,  0.,  1.,  2.],[ 3.,  4.,  5.,  6.],[ 7.,  8.,  9., 10.]])指数运算结果:tensor([[2.7183e+00, 7.3891e+00, 2.0086e+01, 5.4598e+01],[1.4841e+02, 4.0343e+02, 1.0966e+03, 2.9810e+03],[8.1031e+03, 2.2026e+04, 5.9874e+04, 1.6275e+05]])

4. 张量拼接与比较

# 行拼接
c = torch.cat((x, one), dim=0)
print("行拼接结果:\n", c)# 列拼接
d = torch.cat((x, one), dim=1)
print("\n列拼接结果:\n", d)# 张量比较
print("\n张量比较:\n", x == a)

输出结果

行拼接结果:tensor([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[ 1.,  1.,  1.,  1.],[ 1.,  1.,  1.,  1.],[ 1.,  1.,  1.,  1.]])列拼接结果:tensor([[ 0.,  1.,  2.,  3.,  1.,  1.,  1.,  1.],[ 4.,  5.,  6.,  7.,  1.,  1.,  1.,  1.],[ 8.,  9., 10., 11.,  1.,  1.,  1.,  1.]])张量比较:tensor([[False, False, False, False],[False, False, False, False],[False, False, False, False]])

5. 广播机制

e = torch.arange(3).reshape(3, 1)
print("广播加法:\n", x + e)

输出结果

广播加法:tensor([[ 0.,  1.,  2.,  3.],[ 5.,  6.,  7.,  8.],[10., 11., 12., 13.]])

6. 索引与切片

print("最后一行:", x[-1])
print("第二到第三行:\n", x[1:3])x[1, 2] = 100  # 修改单个元素
x[0:2, 1:3] = 0  # 修改子区域
print("\n修改后的张量:\n", x)

输出结果

最后一行: tensor([ 8.,  9., 10., 11.])
第二到第三行:tensor([[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.]])修改后的张量:tensor([[ 0.,  0.,  0.,  3.],[ 4.,  0.,  0.,  7.],[ 8.,  9., 10., 11.]])

7. 内存地址管理

before = id(x)
x = x + a  # 新内存分配
# x += a    # 原地操作
print("内存地址是否变化:", before == id(x))D = x.clone()
print("克隆张量地址对比:", before == id(D))

输出结果

内存地址是否变化: False
克隆张量地址对比: False

8. PyTorch与NumPy转换

A = x.numpy()
B = torch.tensor(A)
print("类型转换:", type(A), type(B))

输出结果

类型转换: <class 'numpy.ndarray'> <class 'torch.Tensor'>

9. 统计操作

sum_a = a.sum(axis=1, keepdims=True)
print("按行求和:\n", sum_a)
print("归一化结果:\n", a / sum_a)
print("按列累加:\n", a.cumsum(axis=0))

输出结果

按行求和:tensor([[10],[26],[42]])
归一化结果:tensor([[0.1000, 0.2000, 0.3000, 0.4000],[0.1923, 0.2308, 0.2692, 0.3077],[0.2143, 0.2381, 0.2619, 0.2857]])
按列累加:tensor([[ 1,  2,  3,  4],[ 6,  8, 10, 12],[15, 18, 21, 24]])

通过本文的示例代码,您可以快速掌握PyTorch张量操作的核心功能。建议读者在实际项目中多加练习以巩固知识!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/76494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】Redis中的常见数据类型(一)

文章目录 前言一、Redis前置知识1. 全局命令2、数据结构和内部编码3. 单线程架构 二、String 字符串1. 常见命令2. 计数命令3.其他命令4. 内部编码5. 典型使用场景 三、Hash哈希1. 命令2.内部编码3. 使用场景4. 缓存方式对比 结语 前言 Redis 提供了 5 种数据结构&#xff0c;…

Windows 中使用 `netstat` 命令查看端口占用

在 Windows 系统中&#xff0c;可以通过 netstat 命令来查看当前系统的网络连接以及端口的占用情况。以下是关于该命令的具体说明&#xff1a; #### 使用方法 1. **查看所有端口及其状态** 可以通过以下命令查看系统中的所有活动连接和监听端口&#xff1a; bash net…

23种设计模式-结构型模式之装饰器模式(Java版本)

Java 装饰器模式&#xff08;Decorator Pattern&#xff09;详解 &#x1f381; 什么是装饰器模式&#xff1f; 装饰器模式是一种结构型设计模式&#xff0c;允许向一个对象动态添加新的功能&#xff0c;而不改变其结构。 &#x1f9f1; 你可以想象成在原有功能上“包裹”一…

解决模拟器打开小红书设备异常问题

解决模拟器打开小红书设备异常问题 解决模拟器打开小红书设备异常问题和无法打开问题 解决模拟器打开小红书设备异常问题和无法打开问题 问题描述 最近有用户反馈在模拟器上无法正常登录和打开小红书APP&#xff0c;系统提示"设备异常"错误。本文将详细介绍如何通过…

论文阅读:2025 arxiv AI Alignment: A Comprehensive Survey

总目录 大模型安全相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 AI Alignment: A Comprehensive Survey 人工智能对齐&#xff1a;全面调查 https://arxiv.org/pdf/2310.19852 https://alignmentsurvey.com/ https://www.doubao.com/cha…

精益数据分析(1/126):从《精益数据分析》探寻数据驱动增长之道

精益数据分析&#xff08;1/126&#xff09;&#xff1a;从《精益数据分析》探寻数据驱动增长之道 在当今数字化时代&#xff0c;数据无疑是企业发展的关键驱动力&#xff0c;对于竞争激烈的程序化广告行业更是如此。最近我在研读《精益数据分析》这本书&#xff0c;收获颇丰&…

第五节:React Hooks进阶篇-如何用useMemo/useCallback优化性能

反模式&#xff1a;滥用导致的内存开销React 19编译器自动Memoization原理 React Hooks 性能优化进阶&#xff1a;从手动到自动 Memoization &#xff08;基于 React 18 及以下版本&#xff0c;结合 React 19 新特性分析&#xff09; 一、useMemo/useCallback 的正确使用场景…

windows server C# IIS部署

1、添加IIS功能 windows server 2012、windows server 2016、windows server 2019 说明&#xff1a;自带的是.net 4.5 不需要安装.net 3.5 尽量使用 windows server 2019、2016高版本&#xff0c;低版本会出现需要打补丁的问题 2、打开IIS 3、打开iis应用池 .net 4.5 4、添…

Elasticsearch的Java客户端库QueryBuilders查询方法大全

matchAllQuery 使用方法&#xff1a;创建一个查询&#xff0c;匹配所有文档。 示例&#xff1a;QueryBuilders.matchAllQuery() 注意事项&#xff1a;这种查询不加任何条件&#xff0c;会返回索引中的所有文档&#xff0c;可能会影响性能&#xff0c;特别是文档数量很多时。 ma…

C#进阶学习(六)单向链表和双向链表,循环链表(下)循环链表

目录 &#x1f4ca; 链表三剑客&#xff1a;特性全景对比表 一、循环链表节点类 二、循环链表的整体设计框架 三、循环列表中的重要方法&#xff1a; &#xff08;1&#xff09;头插法&#xff0c;在头结点前面插入新的节点 &#xff08;2&#xff09;尾插法实现插入元素…

交换网络基础

学习目标 掌握交换机的基本工作原理 掌握交换机的基本配置 交换机的基本工作原理 交换机是局域网&#xff08;LAN&#xff09;中实现数据高效转发的核心设备&#xff0c;工作在 数据链路层&#xff08;OSI 模型第二层&#xff09;&#xff0c;其基本工作原理可概括为 “学习…

科学研究:怎么做

科研&#xff08;科学研究&#xff09;​​ 是指通过系统化的方法&#xff0c;探索自然、社会或人文领域的未知问题&#xff0c;以发现新知识、验证理论或解决实际问题的活动。它的核心是​​基于证据的探索与创新​​&#xff0c;旨在推动人类认知和技术的进步。 科研的核心要…

算法题(128):费解的开关

审题&#xff1a; 本题需要我们将多组测试用例中拉灯数小于等于6的最小拉灯数输出&#xff0c;若拉灯数最小值仍大于6&#xff0c;则输出-1 思路&#xff1a; 方法一&#xff1a;二进制枚举 首先我们先分析一下基本特性&#xff1a; 1.所有的灯不可能重复拉&#xff1a;若拉的数…

MFC文件-屏幕录像

下载本文件 本文件将获取屏幕图像数据的所有代码整合到两个文件中&#xff08;ScreenRecorder.h和ScreenRecorder.cpp&#xff09;&#xff0c;使获取屏幕图像数据变得简单。输出IYUV视频流。还可以获取系统播放的声音&#xff0c;输出PCM音频流。由于使用了MFC类&#xff0c;本…

0801ajax_mock-网络ajax请求1-react-仿低代码平台项目

0 vite配置proxy代理 vite.config.ts代码如下图所示&#xff1a; import { defineConfig } from "vite"; import react from "vitejs/plugin-react";// https://vite.dev/config/ export default defineConfig({plugins: [react()],server: {proxy: {&qu…

JVM笔记【一】java和Tomcat类加载机制

JVM笔记一java和Tomcat类加载机制 java和Tomcat类加载机制 Java类加载 * loadClass加载步骤类加载机制类加载器初始化过程双亲委派机制全盘负责委托机制类关系图自定义类加载器打破双亲委派机制 Tomcat类加载器 * 为了解决以上问题&#xff0c;tomcat是如何实现类加载机制的…

IP编址(来自YESLAB新网工的笔记)

上层协议类型 概念&#xff1a;通常指的是位于网络层&#xff08;如 IP 层&#xff09;以上的协议类型&#xff0c;这些协议在数据传输时需要由网络层&#xff08;或更低层&#xff09;协议承载。以 IP 协议为例&#xff0c;IP 报文头部中的 协议字段&#xff08;Protocol Fie…

SpringBoot学习(过滤器Filter。拦截器Interceptor。全局异常捕获处理器GlobalExceptionHandler)(详细使用教程)

目录 一、过滤器Filter。 1.1定义与规范。 1.2工作原理与范围。 1.3使用场景。 1.4 SpringBoot实现过滤器。&#xff08;Filter配置2种方式&#xff09; <1>注解配置(WebFilter、Order、ServletComponentScan)。 创建过滤器类。 启用 Servlet 组件扫描。 <2>配置类…

c++题目_P1443 马的遍历

P1443 马的遍历 # P1443 马的遍历 ## 题目描述 有一个 $n \times m$ 的棋盘&#xff0c;在某个点 $(x, y)$ 上有一个马&#xff0c;要求你计算出马到达棋盘上任意一个点最少要走几步。 ## 输入格式 输入只有一行四个整数&#xff0c;分别为 $n, m, x, y$。 ## 输出格式 …

清华《数据挖掘算法与应用》K-means聚类算法

使用k均值聚类算法对表4.1中的数据进行聚类。代码参考P281。 创建一个名为 testSet.txt 的文本文件&#xff0c;将以下内容复制粘贴进去保存即可&#xff1a; 0 0 1 2 3 1 8 8 9 10 10 7 表4.1 # -*- coding: utf-8 -*- """ Created on Thu Apr 17 16:59:58 …