PyTorch系列教程:Tensor.view() 方法详解
这篇简明扼要的文章是关于PyTorch中的tensor.view()方法的介绍与应用,与reshape()方法的区别,同时给出示例进行详细解释。
Tensor基础
Tensor(张量)的视图是一个新的Tensor,它与原始Tensor共享相同的底层数据,但具有不同的形状或大小。view()方法用于在不改变其数据的情况下将张量重塑为新的形状。它返回原始张量的新视图。这意味着修改新的张量会影响原来的张量,反之亦然。

语法:
Tensor.view(*shape) -> Tensor
- self:想要重塑的输入Tensor。
- *shape:一个
torch.Size对象或指定输出张量所需形状的整数序列。还可以使用-1从其他维度推断一个维度的大小。
然而,Tensor.view()仅适用于连续张量,即存储在连续内存中的张量。如果输入张量不是连续的,则需要在调用tensor .view()之前调用tensor.consecuous()。你可以通过调用tensor.is_consecuous()来检查张量是否是连续的。
代码示例
下面演示如何在实践中使用tensor.view()方法:
>>> import torch
>>> torch.manual_seed(2023)
>>> # Create a tensor with the shape of 4x4
>>> x = torch.randn(4, 4)
>>> print(x)
tensor([[ 0.4305, -0.3499, 0.4749, 0.9041],[-0.7021, 1.5963, 0.4228, -0.6940],[ 0.9672, 1.5569, -2.3860, 0.6994],[-1.0325, -2.6043, 0.9337, -0.1050]])
>>> y = x.view(16)
>>> print(y)
tensor([ 0.4305, -0.3499, 0.4749, 0.9041, -0.7021, 1.5963, 0.4228, -0.6940,0.9672, 1.5569, -2.3860, 0.6994, -1.0325, -2.6043, 0.9337, -0.1050])
>>> z=x.view(2,8)
>>> print(z)
tensor([[ 0.4305, -0.3499, 0.4749, 0.9041, -0.7021, 1.5963, 0.4228, -0.6940],[ 0.9672, 1.5569, -2.3860, 0.6994, -1.0325, -2.6043, 0.9337, -0.1050]])
>>> w=x.view(-1,2)
>>> print(w)
tensor([[ 0.4305, -0.3499],[ 0.4749, 0.9041],[-0.7021, 1.5963],[ 0.4228, -0.6940],[ 0.9672, 1.5569],[-2.3860, 0.6994],[-1.0325, -2.6043],[ 0.9337, -0.1050]])
>>>
你可以看到y和x有相同的数据,但形状不同,是16x1。Z和x有相同的数据,但形状不同,是2x8。W和x有相同的数据,但形状不同,是8x2。w的最后一个维度是从其他维度和x中的元素数量推断出来的。
Torch.view()和torch.reshape()的区别
torch.reshape()函数和tensor .view()方法之间的区别在于torch.reshape()可以返回原始张量的视图或副本,具体取决于新形状是否与原始形状和步幅兼容,而tensor .view()总是返回原始张量的视图,但仅适用于连续张量。
当你想重塑一个张量而不担心它的连续性或复制行为时,你应该使用torch.reshape(),当你想重塑一个连续张量并确保它与原始张量共享相同的数据时,你应该使用tensor. view()。
示例对比
场景 1:数据连续时,两者行为一致
import torch# 创建一个连续存储的张量 (2x3)
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
print("原始形状:", x.shape) # (2, 3)
print("是否连续:", x.is_contiguous()) # True# 使用 view 改变形状 (3x2)
y = x.view(3, 2)
print("view 结果:", y) # [[1, 2], [3, 4], [5, 6]]# 使用 reshape 改变形状 (3x2)
z = x.reshape(3, 2)
print("reshape 结果:", z) # [[1, 2], [3, 4], [5, 6]]
结果一致,且未复制数据(is_contiguous() 返回 True)。
场景 2:数据不连续时,view 失败,reshape 成功
# 转置后数据不再连续(原按行存储,转置后按列逻辑访问)
x_transposed = x.t()
print("转置后形状:", x_transposed.shape) # (3, 2)
print("是否连续:", x_transposed.is_contiguous()) # False# 尝试用 view 改变形状 → 报错!
try:y = x_transposed.view(2, 3)
except RuntimeError as e:print("view 错误:", str(e)) # "invalid argument: cannot view a non-contiguous tensor as ..."# 使用 reshape 成功(自动复制数据)
z = x_transposed.reshape(2, 3)
print("reshape 结果:", z) # [[1, 4], [2, 5], [3, 6]]
print("是否连续:", z.is_contiguous()) # True
场景 3:reshape 的灵活性(使用 -1)
# 不确定某一维度的大小时,仅用 reshape
x_2d = torch.randn(4, 6) # 形状 (4, 6)
# 将最后一维压缩为总和,剩余维度自动推断
y = x_2d.reshape(-1, 3) # 结果形状: (8, 3)
print(y.shape) # torch.Size([8, 3])
因此,我们应优先用 view:当数据连续且形状明确时,view 更高效(零复制);优先用 reshape:需处理非连续数据、动态推断维度或不确定形状时。
相关文章:
PyTorch系列教程:Tensor.view() 方法详解
这篇简明扼要的文章是关于PyTorch中的tensor.view()方法的介绍与应用,与reshape()方法的区别,同时给出示例进行详细解释。 Tensor基础 Tensor(张量)的视图是一个新的Tensor,它与原始Tensor共享相同的底层数据,但具有不同的形状或…...
从零开始了解Manus(文末附教程)
大家好,我是樱木。 《从零开始了解Manus》,这个教程对于想了解 Manus的同学,全部都在里面了! Manus 是一款能像真人一样帮你干活的AI助手,运行在云端,不占电脑内存。 它可以自动完成复杂任务,…...
不同开发语言之for循环的用法、区别总结
一、Objective-C (1)标准的c风格 for (int i 0; i < 5; i) {NSLog("i %d", i); } (2)for in循环。 NSArray *array ["apple", "banana", "orange"]; for (NSString *fruit in …...
CentOS 7 aarch64上制作kernel rpm二进制包 —— 筑梦之路
环境说明 centos 7 aarch64 gcc 8.3.1 kernel 5.4.290 准备编译制作 # 安装必要的工具和包yum install rpm-devel rpmdevtools yum groupinstall "Development Tools"yum install ncurses-devel bc elfutils-libelf-devel openssl-devel # 安装gcc 8.3.1# 修改…...
Cursor 使用经验,一个需求开发全流程
软件开发中 Cursor 的使用经验成为关注焦点,尤其是处理大型数据集的需求。用户提到“Cursor 使用经验,一个需求开发全流程”,但“Cursor”可能指数据库游标,涉及逐行处理数据。本文将详细探讨开发一个需求的完整流程,包…...
2025-03-08 学习记录--C/C++-PTA 习题9-2 计算两个复数之积
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 二、代码(C语言)⭐️ #include <stdio.h>struct complex{int real;int imag; …...
DeepSeek-R1本地化部署(Mac)
一、下载 Ollama 本地化部署需要用到 Ollama,它能支持很多大模型。官方网站:https://ollama.com/ 点击 Download 即可,支持macOS,Linux 和 Windows;我下载的是 mac 版本,要求macOS 11 Big Sur or later,Ol…...
【时时三省】(C语言基础)赋值语句
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 赋值语句 在C程序中,最常用的语句是:赋值语句和输入输出语句。其中最基本的是赋值语句程序中的计算功能大部分是由赋值语句实现的,几乎每一个有实用价值的程序都包括赋值语句。有的程序中的大部分语句都是赋值…...
如何提取图片文字
如何分析图片风格: 分析下图片是什么风格,用即梦AI的提示语描述。我要使用描述语去即梦生成同样的图...
3.3.2 用仿真图实现点灯效果
文章目录 文章介绍Keil生成.hex代码Proteus仿真图中导入.hex代码文件开始仿真 文章介绍 点灯之前需要准备好仿真图keil代码 仿真图参考前文:3.3.2 Proteus第一个仿真图 keil安装参考前文:3.1.2 Keil4安装教程 keil新建第一个项目参考前文:3.1…...
BGP 基本配置实验
实验拓扑 实验需求 按照图示配置 IP 地址,R1 和 R5 上使用环回口模拟业务网段,R2,R3,R4 的环回口用于配置 Router-id 和建立 IBGP 邻居AS 200 运行 OSPF 实现内部网络互通R1,R2,R4,R5 运行 BGP…...
关于 QPalette设置按钮背景未显示出来 的解决方法
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/146047054 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...
## DeepSeek写水果记忆配对手机小游戏
DeepSeek写水果记忆配对手机小游戏 提问 根据提的要求,让DeepSeek整理的需求,进行提问,内容如下: 请生成一个包含以下功能的可运行移动端水果记忆配对小游戏H5文件: 要求 可以重新开始游戏 可以暂停游戏 卡片里的水果…...
P8662 [蓝桥杯 2018 省 AB] 全球变暖--DFS
P8662 [蓝桥杯 2018 省 AB] 全球变暖--dfs 题目 解析讲下DFS代码 题目 解析 这道题的思路就是遍历所有岛屿,判断每一块陆地是否会沉没。对于这种图的遍历,我们首先应该想到DFS。 代码的注意思想就是,在主函数中遍历找出所有岛屿,…...
opentitan riscv
OpenTitan是一个开源的硅根信任(Root of Trust, RoT)项目,旨在使硅RoT的设计和实现更加透明、可信和安全,适用于企业、平台提供商和芯片制造商。该项目由lowRISC CIC管理,作为一个协作项目,旨在生产高质量…...
数据结构篇——串(String)
一、引入 在计算机中的处理的数据内容大致可分为以整形、浮点型等的数值处理和字符、字符串等的非数值处理。 今天我们主要学习的就是字符串数据。本章主要围绕“串的定义、串的类型、串的结构及其运算”来进行串介绍与学习。 二、串的定义 2.1、串的基本定义 串(s…...
Linux系统重置密码
当root账号忘记密码时,如何重置密码?下面有两种方法可以解决该问题: 重置root密码 1.方法一、rd.break命令 第一步 重启系统,在下图所示界面中按e,进入编辑模式----一定要快速按,否则6秒后就会到登陆界面…...
Flow Matching 和 Rectified Flow的区别
Flow Matching是通过匹配目标向量场来训练CNF,比如通过最小化目标向量场和模型预测之间的差异。 Rectified Flow的核心思想是学习一个确定性轨迹,将数据分布转换为噪声分布,比如通过线性插值或者更复杂的路径。 推荐阅读: SD3的采…...
机器学习编译
一、机器学习概述 1.1 什么是机器学习编译 将机器学习算法从开发形态通过变换和优化算法使其变成部署形态。即将训练好的机器学习模型应用落地,部署在特定的系统环境之中的过程。 开发形态:开发机器学习模型时使用的形态。Pytorch,TensorFlow等通用框…...
什么是 BotGate 动态防护?
随着网络威胁日益复杂,传统的防护方法逐渐暴露出漏洞。BotGate 动态防护是一种结合机器人网络(Botnet)和动态防护技术的新兴网络安全模式。它利用大量分布式设备(即“僵尸网络”或 Botnet)的实时协作能力,快…...
马吕斯定律在现代光学技术中的关键应用解析
1. 马吕斯定律:偏振光世界的"交通规则" 想象一下你戴着偏光太阳镜站在湖边,神奇的事情发生了——水面刺眼的反光突然消失了!这背后正是马吕斯定律在发挥作用。这个由法国物理学家马吕斯在19世纪初发现的规律,本质上描述…...
逐行Hybrid A*路径规划与混合A星泊车路径规划的源码分析(MATLAB版)
逐行hybrid astar路径规划 混合a星泊车路径规划 带你从头开始写hybridastar算法,逐行源码分析matlab版hybridastar算法咱们今天唠唠混合A星(Hybrid A*)路径规划,这玩意儿在自动泊车场景用得贼溜。和传统A星最大的区别在于它能处理…...
cv_unet_image-colorization新手入门:从安装到上色的完整流程
cv_unet_image-colorization新手入门:从安装到上色的完整流程 你是不是有一些珍贵的黑白老照片,想要让它们重现当年的色彩?或者你是一名开发者,想要快速体验AI图像上色的魅力?今天,我将带你从零开始&#…...
视频博主必备!用DeepSeek V2批量生成SRT字幕的3种高阶玩法
视频博主必备!用DeepSeek V2批量生成SRT字幕的3种高阶玩法 在内容创作领域,字幕早已从简单的辅助功能演变为提升观看体验、扩大受众群体的关键工具。对于视频博主而言,高效生成精准字幕不仅能节省大量后期时间,更能为内容带来专业…...
写论文没思路?这样梳理,新手也能快速理清逻辑
写论文最磨人的,从来不是熬夜写正文,而是明明定好了选题,却陷入“思路卡顿”的死循环——对着空白文档坐一下午,脑子里只有零散的碎片想法,不知道从哪切入、怎么展开,好不容易写下几句,又觉得逻…...
Jira替代工具如何选?2026年推荐十款适合小团队且容易上手项目管理平台
在数字化转型浪潮席卷全球的背景下,企业尤其是科技驱动型组织正加速将敏捷与精益理念融入核心运营流程。根据Gartner发布的报告,到2025年,超过80%的软件项目将采用敏捷或混合开发模式,这使得能够支撑高效协作与透明化管理的项目管…...
别再傻傻分不清:Electron-packager和Electron-builder到底怎么选?一份给新手的场景化选择指南
Electron打包工具选型指南:从场景需求看electron-packager与electron-builder的抉择 当你第一次尝试将Electron应用交付给用户时,面对electron-packager和electron-builder这两个主流打包工具,是否感到困惑?它们看似功能相似&…...
TMS320F280049系列文章之第二章 工程搭建实战:从零配置到路径设置的避坑指南
1. 工程准备与环境搭建 第一次接触TMS320F280049开发的朋友,可能会被复杂的工程配置劝退。别担心,跟着我的步骤走,保证你能顺利搭建第一个工程。我用的环境是CCS10.3.1和C2000Ware_4_01,这也是目前比较稳定的组合。 先说说准备工作…...
Realistic Vision V5.1 生态工具集成展示:与Cursor等AI编程助手联动工作流
Realistic Vision V5.1 生态工具集成展示:与Cursor等AI编程助手联动工作流 最近在尝试把各种AI工具串起来用,发现了一件挺有意思的事。以前我们做开发,写代码是一个工具,画界面图是另一个工具,做流程图还得再开一个软…...
Visio网络拓扑图绘制实战:从基础操作到高级定制
1. Visio网络拓扑图绘制入门指南 第一次接触Visio画网络拓扑图时,我也被那些复杂的图标和连接线搞得头晕眼花。但用顺手后发现,这玩意儿比PS简单多了,就像用Word画图一样自然。先说说最基础的准备工作:安装Visio时记得勾选"网…...
