上一篇博客讲述了如何根据自己的实际需要在pytorch中创建tensor:pytorch入门篇1——创建tensor,这一篇主要来探讨关于tensor的基本数据变换,是pytorch处理数据的基本方法。
tensor数据的查看与提取主要是通过索引和切片实现的。主要方法有:
tensor[index]tensor[s:d]tensor[s:d:step]torch.masked_select(tensor,mask),其中mask是和tensor等shape的Bool类型矩阵,函数将以一维矩阵的形式返回mask中值为1对应位置tensor矩阵的值################################################
#1、直接索引
a = torch.rand(4,1,16,16)
b = a[0]
print(b.size())
"""
输出结果:
torch.Size([1, 16, 16])
"""
################################################
#2、选定索引的维度范围
c = a[1:3,:,:,:]
print(c.size())
"""
输出结果:
torch.Size([2, 1, 16, 16])
"""
################################################
#3、按步长索引
c = a[0:3:2,:,:,:]
print(c.size())
"""
输出结果:
torch.Size([2, 1, 16, 16])
"""
################################################
#4、按mask筛选索引
d = torch.rand(2,3)
mask = torch.BoolTensor([[0,1,0],
[1,0,1]])
res = torch.masked_select(d,mask)
print(d)
print(res)
"""
输出结果:
tensor([[0.2507, 0.8419, 0.6681],
[0.0940, 0.8476, 0.5883]])
tensor([0.8419, 0.0940, 0.5883])
"""
本部分主要介绍的是将已有的tensor数据改变shape的方法,这是pytorch变换数据的基本操作。
torch.view()主要实现重新定义tensor的shape,对tensor中的元素进行重排列,在view过程中tensor的总元素个数保持不变。该方法的缺点是会丢失维度信息。
#############################################
a = torch.rand(4,4,16,16)
b = a.view(4,32,32)
print(a.shape)
print(b.shape)
"""
输出结果:
torch.Size([4, 4, 16, 16])
torch.Size([4, 32, 32])
#注:在view前后必须保证tensor的总元素个数不变
# 在本例中:4*4*16*16 = 4*32*32
"""
torch.unsqueeze(index):在原tensor的index索引位置对应的维度前增加一个维度,torch.squeeze(index):去掉index索引位置对应的维度,注意:这里index对应的维度必须是1维的,也就是压缩(删除)此维度并不会改变数据的元素个数,当不指定index时,函数会将tensor中所有数值为1的维度压缩。例如:现有tensor(1,4,1,16,16),tensor.squeeze(0)的值为:(4,1,16,16),函数压缩了0这个维度;当不指定index时,tensor.squeeze()的返回值为:(4,16,16),这时函数将tensor上数值为1的维度全部压缩#############################################
a = torch.rand(4,4,16,16)
b = a.unsqueeze(0)
c = torch.rand(1,4,1,16,16).squeeze()
print(a.shape)
print(b.shape)
print(c.shape)
"""
输出结果:
torch.Size([4, 4, 16, 16])
torch.Size([1, 4, 4, 16, 16])
torch.Size([4, 16, 16])
"""
torch.expand():接收参数是将对应元素扩充的指定维度,函数只把原来维度为1的拓展成指定的维度,其它原来维度不是1的接收参数要与其原来维度数保持一致,否则会报错torch.repeat():接收参数是将对应元素复制的次数,函数会将所有维度复制对应的次数,形成新的tensor#############################################
a = torch.rand(4,1,16,16)
#a中只有a[1]是1维度,这里要将它扩充至4,因此expand中第二个参数为4,其它维度不是1,所以要与a保持一致(否则会报错)
b = a.expand(4,4,16,16)
#repeat中的参数都是,代表这要将a中对应维度的元素都复制两次
c = a.repeat(2,2,2,2)
print(a.shape)
print(b.shape)
print(c.shape)
"""
输出结果:
#这是原来a变量的shape
torch.Size([4, 1, 16, 16])
#这是经过expand后的a变量(b)的shape
#可以看出,expand成功将原理index=1位置处的1维度扩充成了对应的4维度
torch.Size([4, 4, 16, 16])
#这是经过repeat后的a变量的shape
#可以看出,repeat将每个维度都复制了2次,即:(4*2,1*2,16*2,16*2)
torch.Size([8, 2, 32, 32])
"""
torch.tanspose():接收参数为指定对换的两个维度索引a,b,函数将返回维度互换后的新tensortorch.permute():接收参数为新排序的维度索引(原来的索引值),函数将返回维度重新排列的新tensor#############################################
a = torch.rand(4,1,12,16)
b = a.transpose(0,2) #第0个维度和第2个维度互换,即:4和12互换
c = a.permute(3,2,0,1) #将原有的3, 2, 0,1维度作为新tensor的0,1,2,3维度
print(a.shape)
print(b.shape)
print(c.shape)
"""
输出结果:
torch.Size([4, 1, 12, 16]) #a.shape
torch.Size([12, 1, 4, 16]) #b.shape (4,1,12,16)-互换4,12->(12,1,4,16)
torch.Size([16, 12, 4, 1]) #c.shape 重新对a进行排列(a[3],a[2],a[0],a[1])->(16,12,4,1)
"""
tensor变换的核心理念是为了更好的服务于高维向量运算,这部分的变换技巧和相关的方法有很多。关于这部分的内容我的建议是:不需要花费大量的时间去刻意记忆,只要知道有这些方法,在编程需要的时候能想起来用这些方法可以解决即可。
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba
我有一个.pfx格式的证书,我需要使用ruby提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o
我正在尝试提取方括号内的内容。到目前为止,我一直在使用它,它有效,但我想知道我是否可以直接在正则表达式中使用某些东西,而不是使用这个删除功能。a="Thisissuchagreatday[coolawesome]"a[/\[.*?\]/].delete('[]')#=>"coolawesome" 最佳答案 差不多。a="Thisissuchagreatday[coolawesome]"a[/\[(.*?)\]/,1]#=>"coolawesome"a[/(?"coolawesome"第一个依赖于提取组而不是完全匹配;第二个利用前瞻和
如何获取外部命令的输出并从中提取值?我有这样的东西:stdin,stdout,stderr,wait_thr=Open3.popen3("#{path}/foobar",configfile)if/exit0/=~wait_thr.value.to_srunlog.puts("Foobarexitednormally.\n")puts"Testcompleted."someoutputvalue=stdout.read("TX.*\s+(\d+)\s+")puts"Outputvalue:"+someoutputvalueend我没有在标准输出上使用正确的方法,因为Ruby告诉我它不能
文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是