python中cat,stac,transpose,permute,squeeze区别用法
**
1 Cat
**
对数据沿着某一维度进行拼接。cat后数据的总维数不变.
比如下面代码对两个2维tensor(分别为23,13)进行拼接,拼接完后变为3*3还是2维的tensor。
import torch
torch.manual_seed(1)
x = torch.randn(2,3)
y = torch.randn(1,3)
print(x,y)
结果:
0.6614 0.2669 0.0617
0.6213 -0.4519 -0.1661
[torch.FloatTensor of size 2x3]
-1.5228 0.3817 -1.0276
[torch.FloatTensor of size 1x3]
将两个tensor拼在一起:
torch.cat((x,y),0)
结果:
0.6614 0.2669 0.0617
0.6213 -0.4519 -0.1661
-1.5228 0.3817 -1.0276
[torch.FloatTensor of size 3x3]
2 stack,增加新的维度进行堆叠
而stack则会增加新的维度。
如对两个12维的tensor在第0个维度上stack,则会变为212的tensor;在第1个维度上stack,则会变为12*2的tensor。
见代码:
a=torch.rand((1,2))
b=torch.rand((1,2))
c=torch.stack((a,b),0)
c.size()
结果:
torch.Size([2, 1, 2])
换成维度1:
d=torch.stack((a,b),1)
d.size()
结果:
torch.Size([1, 2, 2])
3 transpose ,交换维度
代码:
torch.manual_seed(1)
x = torch.randn(2,3)
print(x)
结果:
0.6614 0.2669 0.0617
0.6213 -0.4519 -0.1661
[torch.FloatTensor of size 2x3]
将x的维度互换:
x.transpose(0,1)
结果:
0.6614 0.6213
0.2669 -0.4519
0.0617 -0.1661
[torch.FloatTensor of size 3x2]
**
4 permute,适合多维数据,更灵活的transpose
**
permute是更灵活的transpose,可以灵活的对原数据的维度进行调换,而数据本身不变。
代码如下:
x = torch.randn(2,3,4)
print(x.size())
x_p = x.permute(1,0,2) # 将原来第1维变为0维,同理,0→1,2→2 print(x_p.size())
结果:
torch.Size([2, 3, 4])
torch.Size([3, 2, 4])
**
5 squeeze 和 unsqueeze
**
squeeze(dim_n)压缩,即去掉元素数量为1的dim_n维度。同理unsqueeze(dim_n),增加dim_n维度,元素数量为1。
上代码:
定义张量
import torch
b = torch.Tensor(2,1)
b.shape
Out[28]: torch.Size([2, 1])
不加参数,去掉所有为元素个数为1的维度
b_ = b.squeeze()
b_.shape
Out[30]: torch.Size([2])
加上参数,去掉第一维的元素为1,不起作用,因为第一维有2个元素
b_ = b.squeeze(0)
b_.shape
Out[32]: torch.Size([2, 1])
这样就可以了
b_ = b.squeeze(1)
b_.shape
Out[34]: torch.Size([2])
增加一个维度
b_ = b.unsqueeze(2)
b_.shape
Out[36]: torch.Size([2, 1, 1])
**
6 view
**
torch.Tensor.view会将原有数据重新分配为一个新的张量,比如我们使用:
x = torch.randn(2, 4)
会输出一个随机张量:
1.5600 -1.6180 -2.0366 2.7115
0.8415 -1.0103 -0.4793 1.5734
[torch.FloatTensor of size 2x4]
然后我们看一下使用view重新构造一个Tensor
y = x.view(4,2)
print y
输出如下
1.5600 -1.6180
-2.0366 2.7115
0.8415 -1.0103
-0.4793 1.5734
[torch.FloatTensor of size 4x2]
从这里我们可以看出来他的作用,既然这样,我们可以将他变成一个三维数组:
z = x.view(2,2,2)
输出
(0 ,.,.) =
1.5600 -1.6180
-2.0366 2.7115
(1 ,.,.) =
0.8415 -1.0103
-0.4793 1.5734
[torch.FloatTensor of size 2x2x2]
python中cat,stac,transpose,permute,squeeze区别用法相关推荐
- Python中爬虫框架或模块的区别
Python中爬虫框架或模块的区别,我们在Python的学习过程中,需要不断的总结知识点,这样我们才能进步的更快一些. (1)爬虫框架或模块 Python自带爬虫模块:urllib.urllib2; ...
- Python中值传递和引用传递区别
原文:http://blog.csdn.net/xuqiaobo/article/details/72236539 举例,函数参数如果是dic,都不需要返回值,原值就被改变了 def aa(dic): ...
- Python中str()与repr()函数的区别——repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用...
Python中str()与repr()函数的区别 from:https://www.jianshu.com/p/2a41315ca47e 在 Python 中要将某一类型的变量或者常量转换为字符串对象 ...
- python中列表 元组 字典 集合的区别
参考文章:python中列表 元组 字典 集合的区别
- Python中爬虫框架或模块的区别!
Python中爬虫框架或模块的区别,我们在Python的学习过程中,需要不断的总结知识点,这样我们才能进步的更快一些. (1)爬虫框架或模块 Python自带爬虫模块:urllib.urllib2; ...
- 【Python】Python中str()和repr()函数的区别
作用 在 Python 中要将某一类型的变量或者常量转换为字符串对象通常有两种方法,即 str() 或者 repr() . 区别与使用 参考文章:Python 中 str() 和 repr() 函数的 ...
- python中的return和print的区别_python中return和print的区别(详细)
Huskiesir python最近正在研究.今天,我面临一个问题,那就是,返回和印刷的区别.双方都能输出结果.的区别是什么?闲话少说,看下面的例子.# Code1: def break_words( ...
- python中dtype什么意思_浅谈python 中的 type(), dtype(), astype()的区别
如下所示: 函数 说明 type() 返回数据结构类型(list.dict.numpy.ndarray 等) dtype() 返回数据元素的数据类型(int.float等) 备注:1)由于 list. ...
- python dtype什么意思_浅谈python 中的 type(), dtype(), astype()的区别
如下所示: 函数 说明 type() 返回数据结构类型(list.dict.numpy.ndarray 等) dtype() 返回数据元素的数据类型(int.float等) 备注:1)由于 list. ...
最新文章
- 双极性信号、正交信号和PAM信号通信系统仿真
- 2021年3月15日 腾讯PCG运营开发实习面试(一、二、三面)(面经含总结)
- 骚操作!用 CPU 烤肉,这位程序员做到了
- Zeppelin源码
- 2010.6.15 常用数据类型转换总结
- 补充一种简单的存储过程分页
- PowerShell runspace 的创建,使用和查错
- RMAN 备份与恢复深入解析(二)
- mysql docker自动化_docker自动化部署
- 重庆高职高专计算机排名,重庆十大大专排名(含分数线2021年参考)-重庆最好的全日制专科学校...
- 大话数据结构第四章栈的应用
- POJ1273 裸裸的网络流
- android解析xml文件的方式
- web项目缺少web组件才能与vs一起运行,带razor语法的 asp.net web pages 2.0.0.1
- MyBatis与JPA的区别是什么
- CSP - 201403-1 - 相反数 (C++)
- PHP微信怎么计步数,微信运动怎么关注好友步数(微信运动计步功能使用方法介绍)...
- day24.open 打开文件操作
- WGS 1984地理坐标系的墨卡托投影分度带(UTM ZONE)选择方法
- RabbitMQ简介以及AMQP协议