matlab中的randperm函数,matlab中的reshape

  

  一次置换(暗)将张量的维度换位。   

  

  x=torch.randn(2,3,5) x.size()火炬大小(2,3,5) x置换(2,0,1)。尺寸()火炬。尺寸2 pytorch烫发的使用排列函数功能还是比较简单的,下面主要介绍几个细节点:   

  

  2.1 transpose与permute的异同Tensor.permute(a,b,c,d, ...):置换函数可以对任意高维矩阵进行转置,但没有torch.permute()这个调用方式,只能张量置换():   

  

  torch.randn(2,3,4,5).permute(3,2,0,1).shapetorch.Size(5,4,2,3)http://www . Sina . com/:http://www . Sina . com/,有两种调用方式;   

  

  torch.transpose(Tensor, a,b):   

  

  torch.randn(2,3,4,5).转置(3,0)。转置(2,1)。transpose(3,2).shapetorch.Size(5,4,2,3) torch.randn(2,3,4,5).转置(1,0)。转置(2,1)。transpose(3,1).shapetorch.Size(3,5,2,4)从以上操作中可知,transpose只能操作2D矩阵的转置   

  

  另:连续使用transpose也可实现permute的效果permute相当于可以同时操作于tensor的若干维度,transpose只能同时作用于tensor的两个维度;:观点只能作用在接触的的可变的上,如果在视角之前调用了转置、置换等,就需要调用连续()来返回一个连续拷贝;   

  

  一种可能的解释是:有些张量并不是占用一整块内存,而是由不同的数据块组成,而张量的视图()操作依赖于内存是整块的,这时只需要执行连续()这个函数,把张量变成在内存中连续分布的形式;   

  

  判断特恩索尔是否为连续的,可以调用火炬Tensor.is_contiguous()函数:   

  

  导入torch x=torch.ones(10,10)x . is _ contiguous()# True x . transpose(0,1).is _ contiguous()# false x . transpose(0,1).连续()。is_contiguous() # True另:在框架的最新版本0.4版本中,增加了torch.reshape(),与numpy.reshape()的功能类似,大致相当于tensor.contiguous().视图(),这样就省去了对张量做视图()变换前,调用连续()的麻烦;   

  

  2.2 permute函数与contiguous、view函数之关联   

  

  导入火炬港numpy为npa=np.array(1,2,3,4,5,6)un permuted=torch。张量(a)打印(未置换。尺寸())#――火炬.大小(1,2,3)置换=未置换。置换(2,0,1)打印(置换。尺寸())#――火炬.Size(3,1,2)view_test=unpermuted.view(1,3,2)print(view _ test。尺寸())#――火炬.尺寸(1、3、2)利用函数置换(2,0,1)可以把张量(123456)转换成:   

  

  张量(1,4,2,5,3,6) #打印(置换)如果使用视图(1,3,2)可以得到:   

  

  张量(1,2,3,4,5,6) #打印(查看测试)   

相关文章