深度学习--浅谈torch和numpy的reshape()和view()方法的区别_torch nn reshape-程序员宅基地

技术标签: python  pytorch  numpy  

结论:reshape不论是numpy.array还是torch.Tensor都是按照行的顺序将数据重新排列,reshape是可以对原来数据的维度进行修改的
但是需要注意的是,
Tensor.reshape(*shape);
array.reshape(shape, order=‘C’)
就是说使用的时候要注意的是
array.reshape(shape=(-1, 2, 3, 2));
Tensor.reshape(-1, 2, 3, 2)

多说一句:
torch的view()与reshape()方法都可以用来重塑tensor的shape(注意:numpy中的view()不是对数据重塑的方法而是将更改数据类型并返回一个副本的方法,别用错地方了)
view()与reshape()区别就是使用的条件不一样
view()方法只适用于满足连续性条件的tensor,并且该操作不会开辟新的内存空间,只是产生了对原存储空间的一个新别称和引用,返回值是视图。
而reshape()方法的返回值既可以是视图,也可以是副本,当满足连续性条件时返回view, 否则返回副本[ 此时等价于contiguous().view() 方法,但是不一样的是reshape会开辟一个新的内存空间来保存reshape后的数据]。
结论:
因此当不确能否使用view时,可以使用reshape。
如果只是想简单地重塑一个tensor的shape,那么就是用reshape,
但是如果需要考虑内存的开销而且要确保重塑后的tensor与之前的tensor共享存储空间,那就使用view()。

1、reshape(-1)

print("===================test reshape(-1)==============================")
test_arr = torch.Tensor([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print(test_arr)
print(test_arr.reshape(-1))
test_arr = torch.Tensor([[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]])
print(test_arr)
print(test_arr.reshape(-1))

结果:按照行的顺序将数据拉长

===================test reshape(-1)==============================
tensor([[ 1.,  2.,  3.,  4.],
        [ 5.,  6.,  7.,  8.],
        [ 9., 10., 11., 12.]])
tensor([[ 1.,  2.,  3.],
        [ 4.,  5.,  6.],
        [ 7.,  8.,  9.],
        [10., 11., 12.]])
[[ 1  4  7 10]
 [ 2  5  8 11]
 [ 3  6  9 12]]
[ 1  4  7 10  2  5  8 11  3  6  9 12]

2、reshape维度不变

print("===================test reshape==============================")
test_arr = torch.Tensor([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print(test_arr)
print(test_arr.reshape(-1, 3))
test_arr = np.array([[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]])
print(test_arr)
print(test_arr.reshape(-1, 3))

结果:按照行的顺序将数据重新排列

===================test reshape==============================
tensor([[ 1.,  2.,  3.,  4.],
        [ 5.,  6.,  7.,  8.],
        [ 9., 10., 11., 12.]])
tensor([[ 1.,  2.,  3.],
        [ 4.,  5.,  6.],
        [ 7.,  8.,  9.],
        [10., 11., 12.]])
[[ 1  4  7 10]
 [ 2  5  8 11]
 [ 3  6  9 12]]
[[ 1  4  7]
 [10  2  5]
 [ 8 11  3]
 [ 6  9 12]]

3、reshape增加一个维度

print("===================test reshape==============================")
test_arr = torch.Tensor([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print(test_arr)
print(test_arr.reshape(-1, 2, 3, 2))
test_arr = np.array([[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]])
print(test_arr)
print(test_arr.reshape((-1, 2, 3, 2)))

结果:按照行的顺序将数据重新排列

===================test reshape==============================
tensor([[ 1.,  2.,  3.,  4.],
        [ 5.,  6.,  7.,  8.],
        [ 9., 10., 11., 12.]])
tensor([[[[ 1.,  2.],
          [ 3.,  4.],
          [ 5.,  6.]],

         [[ 7.,  8.],
          [ 9., 10.],
          [11., 12.]]]])
[[ 1  4  7 10]
 [ 2  5  8 11]
 [ 3  6  9 12]]
[[[[ 1  4]
   [ 7 10]
   [ 2  5]]

  [[ 8 11]
   [ 3  6]
   [ 9 12]]]]
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_50727642/article/details/123000495

智能推荐

Android Asynchronous Http Client-Android异步网络请求客户端接口 ._静态http client-程序员宅基地

文章浏览阅读808次。1.简介Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnect,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用android-async-http这个库可以大大的简化操作,它是基于Apache’s HttpClient ,所有的请求都是独立在UI主线程之外,通过回调方法处理请求结果,采用android Hand_静态http client

【人工智能 Open AI】设计一个SQL Where DSL模型,使用 golang 代码来实现DSL的翻译成SQL。-程序员宅基地

文章浏览阅读2.4w次。设计一个SQL Where DSL模型,使用 golang 代码来实现DSL的翻译成SQL。

旋转变压器编码器软件解算方法与应用_abz解码-程序员宅基地

文章浏览阅读1.9w次,点赞18次,收藏140次。STM32F1单片机实现旋变软件解码1.硬件电路设计1,10khz 正弦信号发生器。要求电流能够达到500mA~1A左右,幅值7.5V。1.可以利用芯片输出10kzh方波,通过一次积分电路得到三角波,通过二次积分得到正弦波。2.可以通过芯片输出两路调制pwm波,再通过滤波器得到差分正弦波。设计2,输出信号调理电路。差分正弦信号,调理到0~3.3V模拟信号,用于连接stm32单片机。一种参考电路设计..._abz解码

一键生成Java调用时序图_sequenceoutline-程序员宅基地

文章浏览阅读233次。日常开发阅读源码时,容易忘记前面的代码,此时,如果有简略的时序图就能很方便理解整个结构。那么一键生成时序图及跳过某个调用就显得很有必要。IDEA插件SequenceOutline提供了一键生成时序图,并提供了转换成PlantUml的能力。_sequenceoutline

m在ISE平台下使用verilog开发基于FPGA的GMSK调制器-程序员宅基地

文章浏览阅读1k次。有好的功率频谱特性,较优的误码性能,特别是带外辐射小,很适用于工作在VHF和UHF频段的移动通信系统,越来越引起人们的关注。原始码元信号首先经过双极性编码,然后对其进行采样,经过插值提高数据采样率,通过高斯低通滤波器对原始信号进行带宽限制处理,然后对限带信号进行MSK基带调制,生成相互正交的I、Q两路基带信号,I、Q两路信号再分别与在载波 、 相乘,最终再通过加法器,使两路信号相加,得到最终的GMSK调制信号,通过DA送到天线部分。对于2FSK调制,有两个频率状态,分别对应符号“1”和“0”。

基于树莓派的AirPlay功能实现-程序员宅基地

文章浏览阅读2w次,点赞5次,收藏30次。手里有一个第一代的树莓派开发板,很长时间都没有使用过。今天尝试着搭建一个支持AirPlay的服务。顺便回顾一下树莓派的烧录、配置、远程登录等操作。

随便推点

Git忽略文件的几种方法,以及.gitignore文件的忽略规则_git 忽略-程序员宅基地

文章浏览阅读1.1w次,点赞7次,收藏37次。除了可以在项目中定义**.gitignore文件外,还可以设置全局的git .gitignore文件**来管理所有Git项目的行为。这种方式在不同的项目开发者之间是不共享的,是属于项目之上Git应用级别的行为。这种方式也需要创建相应的.gitignore文件,可以放在C:/Users/用户名/目录下。_git 忽略

Android Design Support Library(二)用NavigationView实现抽屉菜单界面_安卓抽屉对界面-程序员宅基地

文章浏览阅读8.3k次,点赞6次,收藏17次。NavigationView在MD设计中非常重要,之前Google也提出了使用DrawerLayout来实现导航抽屉。这次,在Android Design Support Library中,Google提供了NavigationView来实现导航菜单界面。这次我们写的代码在Android用TabLayout实现类似网易选项卡动态滑动效果这篇文章代码的基础上进行修改,所以最好先看看上面这篇文章_安卓抽屉对界面

python如何测接口自动化_python接口自动化测试(一)-程序员宅基地

文章浏览阅读1.4k次。本节开始,开始介绍python的接口自动化测试,首先需要搭建python开发环境,到https://www.python.org/下载python版本直接安装就以了,建议 下载python2.7.11版本,当然,也是可以下载python最新版本的。接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管..._python 接口自动化测试

C语言课程设计物品竞拍管理(成品版!)_用c语言编程 个实时在线拍卖程序-程序员宅基地

文章浏览阅读1.4k次,点赞7次,收藏29次。任务要求设计一个类物品竞拍管理系统,实现的功能有:1.管理端和拍卖者端2.账户的注册登录3.拍卖品的增删改查(查分为通过物品名称、编号、类型查找)4.管理端输出所有已注册账户名称及已录入拍卖物名称5.竞拍系统由于涉及到账户注册登录及拍卖品增删改查,通过数组会更方便查找,但课设要求通过链表写入文件,我的思路便是通过数组及链表存储,数组方便查找。在程序初始化时先通过fgets及fscanf函数从文件中读取数据至数组。不足:每个账户只能录入一件拍卖品,但方便管理;竞拍系统可能._用c语言编程 个实时在线拍卖程序

【openGL教程08】基于C++的着色器(02)_opengl 2 着色器-程序员宅基地

文章浏览阅读1k次,点赞12次,收藏19次。着色器是openGL渲染的重要内容,客户如果想自我实现渲染灵活性,可以用着色器进行编程,这种程序小脚本被传送到GPU的显卡内部,起到动态灵活的着色作用。_opengl 2 着色器

maven 报错 To see the full stack trace of the errors, re-run Maven with the -e switch.Re-run Maven usi-程序员宅基地

文章浏览阅读1.2w次。今天从新安装idea后出现的问题错误信息:D:\dev\Java\jdk1.8\bin\java.exe -Dmaven.multiModuleProjectDirectory=E:\CiHai\test\online_chat\user_serve -Dmaven.home=D:\dev\maven\apache-maven-3.3.9 -Dclassworlds.conf=D:\dev\maven\apache-maven-3.3.9\bin\m2.conf "-Dmaven.ext.class.p_to see the full stack trace of the errors, re-run maven with the -e switch.