Pytorch笔记 (3) 科学计算2
一、组织张量的元素
(1)重排张量元素
本节介绍在不改变 张量元素个数 和 各元素的值的情况下改变张量的大小
torch.Tensor类的成员方法 reshape()
参数是多个int类型的值。
如果想要把一个张量的大小改成 s[0],s[1],s[2],s[3]....那就让s[0],s[1],s[2],s[3]....作为reshape() 方法的n个参数
使用 reshape() 在不改变元素个数和各元素的值的情况下改变张量大小
tc = torch.arange(12) #张量大小 (12,)
print('tc={}'.format(tc))
t322 = tc.reshape(3,2,2) #张量大小 (3,2,2)
print('t322={}'.format(t322))
t43 = t322.reshape(4,3) #张量大小(4,3)
print('t43={}'.format(t43))
tc=tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
t322=tensor([[[ 0, 1],
[ 2, 3]], [[ 4, 5],
[ 6, 7]], [[ 8, 9],
[10, 11]]])
t43=tensor([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
在reshape() 参数里,1个维度的大小用 -1 代替。如果某个维度的大小用-1代替,那么该函数就会根据张量总元素的个数 和 其他各维度的元素个数 自动计算这个用 -1指定的维度大小
例如:
t = torch.arange(24).reshape(2,-1,4)
print(t)
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]], [[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
squeeze() 可以消除张量大小中大小为1的维度
t1 = torch.arange(24).reshape(2,1,3,1,4)
print(t1.squeeze()) #消去一维后,大小为 (2,3,4)
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]], [[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
unsqueeze() 增加一些大小为0的维度,增加的维度的位置由关键字参数 dims 指定
t2 = torch.arange(24).reshape(2,3,4)
print(t2.unsqueeze(dim=2))
tensor([[[[ 0, 1, 2, 3]], [[ 4, 5, 6, 7]], [[ 8, 9, 10, 11]]], [[[12, 13, 14, 15]], [[16, 17, 18, 19]], [[20, 21, 22, 23]]]])
(2)张量的交换
张量的交换是将张量的各维度重新排列
permute () 交换
tt = torch.arange(24).reshape(1,2,3,4) #大小 = (1,2,3,4)
print(tt.permute(dims=[2,0,1,3])) #大小 = (3,1,2,4) 即:交换原维度的第2 ..0 ..1..3。。。个维度
transpose() 转置 t() 二维张量装置
t12 = torch.tensor([[5.,-9.],])
print('t12={}'.format(t12))
t21 = t12.transpose(0,1)
print('t21={}'.format(t21))
t21 = t12.t()
print('t21={}'.format(t21))
t12=tensor([[ 5., -9.]])
t21=tensor([[ 5.],
[-9.]])
t21=tensor([[ 5.],
[-9.]])
(3)选取部分张量元素
index_select()
这个成员方法有两个参数 ———— 参数dim 是一个int 值 —— 表示对 哪个维度进行处理
参数index —— 是一个 torch.Tensor 实例,表示选取那个维度的哪些指标
例如: 调用index_select() 的torch.Tensor() 类实例的大小为(s[0]...s[x]..s[n-1]),dim = 1,index = (x,) 那么选取得到的张量大小 为(s[0]....s[x-1],x,s[x+1]...s[n-1])
t = torch.arange(24).reshape(2,3,4) #大小 = {2,3,4}
index = torch.tensor([1,2]) #大小 (2,)
print(t.index_select(1,index)) #大小 = {2,2,4}
tensor([[[ 4, 5, 6, 7],
[ 8, 9, 10, 11]], [[16, 17, 18, 19],
[20, 21, 22, 23]]])
要对张量的某个维度进行选取 ———— 也可以用 [] ———— 需要给出在所有维度上的指标。在每个维度上,可以选取1个指标、多个指标【包括全部指标】。
t = torch.arange(12)
print(t)
print(t[3]) #选取1个元素,大小(),值为3
print(t[-5]) #选取1个元素,大小(),值为7
print(t[3:6]) #选取连续元素,大小(3,)
print(t[:6]) #选取连续元素,大小(6,)
print(t[3:]) #选取连续元素,大小(9,)
print(t[-5:]) #选取连续元素,大小(5,)
print(t[3:6:2]) #选取不连续元素,大小(2,)
print(t[3::2]) #选取不连续元素,大小(5,)
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
tensor(3)
tensor(7)
tensor([3, 4, 5])
tensor([0, 1, 2, 3, 4, 5])
tensor([ 3, 4, 5, 6, 7, 8, 9, 10, 11])
tensor([ 7, 8, 9, 10, 11])
tensor([3, 5])
tensor([ 3, 5, 7, 9, 11])
对于有多个维度的情况,可以用英文"," 分割各个维度的指标
t = torch.arange(12).reshape(3,4)
print(t)
print(t[2:,-2]) #大小(1,) 值为[10,]
print(t[0,:]) #大小(4,) 值为[0,1,2,3]
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
tensor([10])
tensor([0, 1, 2, 3])
masked_select()
接受一个张量参数 mask,它的大小必须调和 用masked_selected() 方法的类实例相同,并且元素类型必须为 torch.int8
张量mask 里面的元素非0即1,表示是否要选择对应元素
masked_selected() 将张量mask 选定的那些值以一个一维张量的形式返回,一维张量的元素个数就是张量mask 中1的个数
t = torch.arange(12).reshape(3,4)
mask = torch.tensor([[1,0,0,1],[0,1,1,0],[0,0,1,0]],dtype=torch.uint8)
t.masked_select(mask) #大小(5,)
tensor([ 0, 3, 5, 6, 10])
take()
不再考虑张量的具体大小,而只考虑张量的元素总个数
take() 函数将张量个元素按照唯一的指标进行索引,相当于对经过 reshape(-1) 操作后的张量进行索引
t = torch.arange(12).reshape(3,4)
print(t)
indices = torch.tensor([2,5,6])
print(indices)
print(t.take(indices)) #大小(3,) 值为[2,5,6]
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
tensor([2, 5, 6])
tensor([2, 5, 6])
(4)张量的扩展和拼接
repeat()
可以将张量的内容进行重复,使张量的大小变大
(s[0],s[1]....s[n-1]) —— repeat() ———> (s[0]r[0],s[1]r[1]....s[n-1]r[n-1])
t12 = torch.tensor([[5.,-9.],])
print('t12={}'.format(t12)) #大小(1,2)
t34 = t12.repeat(3,2)
print(t34) #大小(3,4) 1*3 = 3 2*2 =4
t12=tensor([[ 5., -9.]])
tensor([[ 5., -9., 5., -9.],
[ 5., -9., 5., -9.],
[ 5., -9., 5., -9.]])
torch.cat()
tp = torch.arange(12).reshape(3,4)
tn = -tp
tc0 = torch.cat([tp,tn],0)
print(tc0)
tc1 = torch.cat([tp,tp,tn,tn],1)
print(tc1)
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[ 0, -1, -2, -3],
[ -4, -5, -6, -7],
[ -8, -9, -10, -11]])
tensor([[ 0, 1, 2, 3, 0, 1, 2, 3, 0, -1, -2, -3, 0, -1,
-2, -3],
[ 4, 5, 6, 7, 4, 5, 6, 7, -4, -5, -6, -7, -4, -5,
-6, -7],
[ 8, 9, 10, 11, 8, 9, 10, 11, -8, -9, -10, -11, -8, -9,
-10, -11]])
torch.stack()
同样有 张量列表(或元组)和 维度两个参数
stack() 函数要求输入张量的大小完全相同,得到的张量的维度会比输入的张量的大小多1,并且多出的那个维度就是拼接的维度
tp = torch.arange(12).reshape(3,4)
tn = -tp
ts0 = torch.stack([tn,tp],0)
print(ts0)
ts1 = torch.stack([tp,tp,tn,tn],1)
print(ts1)
tensor([[[ 0, -1, -2, -3],
[ -4, -5, -6, -7],
[ -8, -9, -10, -11]], [[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]]])
tensor([[[ 0, 1, 2, 3],
[ 0, 1, 2, 3],
[ 0, -1, -2, -3],
[ 0, -1, -2, -3]], [[ 4, 5, 6, 7],
[ 4, 5, 6, 7],
[ -4, -5, -6, -7],
[ -4, -5, -6, -7]], [[ 8, 9, 10, 11],
[ 8, 9, 10, 11],
[ -8, -9, -10, -11],
[ -8, -9, -10, -11]]])
Pytorch笔记 (3) 科学计算2的更多相关文章
- Pytorch笔记 (3) 科学计算1
一.张量 标量 可以看作是 零维张量 向量 可以看作是 一维张量 矩阵 可以看作是 二维张量 继续扩展数据的维度,可以得到更高维度的张量 ————> 张量又称 多维数组 给定一个张量数据 ...
- python学习笔记(2):科学计算及数据可视化入门
一.NumPy 1.NumPy:Numberical Python 2.高性能科学计算和数据分析的基础包 3.ndarray,多维数组(矩阵),具有矢量运算的能力,快速.节省空间 (1)ndarray ...
- Python 科学计算-介绍
Python 科学计算 作者 J.R. Johansson (robert@riken.jp) http://dml.riken.jp/~rob/ 最新版本的 IPython notebook 课程文 ...
- Python科学计算(一)
作者 J.R. Johansson (robert@riken.jp) http://dml.riken.jp/~rob/ 最新版本的 IPython notebook 课程文件 http://git ...
- [Pytorch] pytorch笔记 <三>
pytorch笔记 optimizer.zero_grad() 将梯度变为0,用于每个batch最开始,因为梯度在不同batch之间不是累加的,所以必须在每个batch开始的时候初始化累计梯度,重置为 ...
- Python科学计算三维可视化(整理完结)
中国MOOC<Pyhton计算计算三维可视化>总结 课程url:here ,教师:黄天宇,嵩天 下文的图片和问题,答案都是从eclipse和上完课后总结的,转载请声明. Python数据三 ...
- Anaconda 用于科学计算的 Python 发行版
用于科学计算的 Python 发行版: 1.Anaconda https://www.continuum.io/ 公司continuum. 有商业版本. Anaconda is the le ...
- 科学计算软件——Octave安装
Octave是一个旨在提供与Matlab语法兼容的开放源代码科学计算及数值分析的工具,是Matlab商业软件的一个强有力的竞争产品. 参考:[ML:Octave Installation] Gener ...
- windows下安装python科学计算环境,numpy scipy scikit ,matplotlib等
安装matplotlib: pip install matplotlib 背景: 目的:要用Python下的DBSCAN聚类算法. scikit-learn 是一个基于SciPy和Numpy的开源机器 ...
随机推荐
- 人人商城返回Json格式的数据
人人商城返回Json格式的数据 1.找到该插件对应的 core/mobile 路径 2.新建一个 api.php 文件 <?php header('Content-Type:applicatio ...
- Github首次使用,上传代码
参考博客:https://blog.csdn.net/zhangsiyao11/article/details/77007684 1.首先下载客户端github下载地址为 https://github ...
- vue - router + iView 的使用(简单例子)
所使用的工具:谷歌浏览器.Nodejs(自带npm).HBuilder 0.要先安装Nodejs,下载安装即可 0-1.安装vue-cli,打开cmd 输入 npm install -g @vue/c ...
- SVN各种错误提示产生原因及处理方法大全
SVN各种错误提示产生原因及处理方法大全 SVN各种错误提示产生原因及处理方法大全 1. svn: Server sent unexpected return value (500 Internal ...
- std::setw(size)与std::setfill(char)
头文件:#include <iostream>#include <iomanip>using namespace std; 功能: std::setw :需要填充多少个字符, ...
- C# 扩展方法——获得枚举的Description
其他扩展方法详见:https://www.cnblogs.com/zhuanjiao/p/12060937.html /// <summary> /// 扩展方法,获得枚举的Descrip ...
- setAttribute()方法和 getAttribute() 方法
一.setAttribute() 方法 setAttribute() 方法为一个或一组元素添加指定的属性,并且为其赋指定的值.(主要针对自定义属性) 如果这个属性已经存在,仅仅设置或是修改属性值. 浏 ...
- Python初记
------Python是一个优雅的大姐姐 我是通过<老男孩Python>学习Python,根据我手上的资源学习Python,资料不齐,但是这个是最好的,边学习边寻找有没有相同的类型. 在 ...
- Nowcoder 北师校赛 B 外挂使用拒绝 ( k次前缀和、矩阵快速幂打表找规律、组合数 )
题目链接 题意 : 中文题.点链接 分析 : 有道题是问你不断求前缀和后的结果 Click here 这道题问的是逆过程 分析方法雷同.可参考 Click here ----------------- ...
- EasyPrtSc sec[1.2] 发布!
//HOMETAG #include<bits/stdc++.h> namespace EasilyPrtSc{ //this namespace is for you to be mor ...