Bootstrap

torch文档学习笔记

下面为官方文档学习笔记    http://pytorch.org/docs/0.3.0/index.html

1、torch.Tensor

from __future__ import print_function
import torch
import numpy as np
import pandas as pd
from pandas import Series,DataFrame

################Tensors Tensors Tensors##################################
x=torch.Tensor(5,3)
torch.is_tensor(x)
torch.is_storage(x)
torch.numel(x)    #int
torch.eye(2)
torch.eye(2,3)
torch.from_numpy(np.array([1,2,3]))   #torch.IntTensor of size 3
torch.from_numpy(np.array([1.0,2,3])) #torch.DoubleTensor of size 3
print(torch.linspace(0,10,steps=3))   #torch.FloatTensor of size 3   0  5  10
print(torch.linspace(0,10,3))   #torch.FloatTensor of size 3   0  5  10
# steps大于1的整数,start end中间样本点的个数
print(torch.logspace(0,1,4)) #torch.FloatTensor of size 4,类似于linspace  以10为底,10的0次方到10的1次方之间
print(torch.ones(2,2)) #torch.FloatTensor of size 2x2
print(torch.ones(2,2,1,5,8,2,8,10)) #torch.FloatTensor of size 2x2x1x5x8x2x8x10
print(torch.ones_like(x)) #torch.FloatTensor of size 5x3
print(torch.arange(0,3,1)) #torch.FloatTensor of size 3    0  1 2  #可迭代对象
print(torch.zeros(2))     #torch.FloatTensor of size 2    0  0
print(torch.zeros_like(x)) #torch.FloatTensor of size 5x3


##############Indexing,Slicing,Joining,Mutating Ops##############################
print(torch.cat((x,x,x),0)) #torch.FloatTensor of size 15x3  #concat 连接Tensor
print(torch.cat((x,x,x),1)) #torch.FloatTensor of size 5x9
print(torch.chunk(x,2))    #截断,结果为元组,元组内元素个数为截断个数
# (
#  0  0  0
#  0  0  0
#  0  0  0
# [torch.FloatTensor of size 3x3]
# ,
# 1.00000e-37 *
#   0.0000  0.0000  0.0000
#   0.0000  7.4058  0.0000
# [torch.FloatTensor of size 2x3]
# )

t=torch.Tensor([[1,2],[3,4]])
# torch.gather(input, dim, index, out=None) → Tensor  dim选择横向还是纵向的
print(torch.gather(t,0,torch.LongTensor([[0,0],[0,0]])))  #torch.FloatTensor of size 2x2
# 1  2
# 1  2
print(torch.gather(t,1,torch.LongTensor([[0,0],[0,0]])))  #torch.FloatTensor of size 2x2
# 1  1
# 3  3

# torch.index_select(input, dim, index, out=None) → Tensor  #选择几行或者几列,如果要同时选列和行,可以分两步
#注意和前面gather一样,index数据类型为LongTensor
print(torch.index_select(t,0,torch.LongTensor([0])))    #torch.FloatTensor of size 1x2    1  2
print(torch.index_select(t,1,torch.LongTensor([0])))    #torch.FloatTensor of size 2x1    1  3
print(torch.index_select(t,1,torch.LongTensor([0,1])))  #torch.FloatTensor of size 2x2
# 1  2
# 3  4
print(t.ge(1))  #torch.ByteTensor of size 2x2  判断t中元素是否大于等于1
# 1  1
# 1  1
print(t.ge(0.5))  #torch.ByteTensor of size 2x2
# 1  1
# 1  1
print(t.ge(2.5))  #torch.ByteTensor of size 2x2
# 0  0
# 1  1
print(t.ge(5))  #torch.ByteTensor of size 2x2
# 0  0
# 0  0

#torch.masked_select(input, mask, out=None) → Tensor  标记选择,即定向选择
print(torch.masked_select(t,t.ge(2.5)))  #torch.FloatTensor of size 2
# 3  4
for i in torch.masked_select(t,t.ge(1.5)):  #可迭代对象
    print(i)
# 2.0
# 3.0
# 4.0

# torch.nonzero(input, out=None) → LongTensor 得到非0元素所在位置N*2,其中N为非0元素个数
print(torch.nonzero(torch.Tensor([1,2,3,0,4]))) #torch.LongTensor of size 4x1
 # 0
 # 1
 # 2
 # 4
non_zero=torch.nonzero(torch.Tensor([[0.6, 0.0, 0.0, 0.0],
                                   [0.0, 0.4, 0.0, 0.0],
                                   [0.0, 0.0, 1.2, 0.0],
                                   [0.0, 0.0, 0.0,-0.4]]))
print(non_zero)   #torch.LongTensor of size 4x2
# 0 0
# 1 1
# 2 2
# 3 3
non_zero=torch.nonzero(torch.Tensor([[0.6, 0.0, 0.0, 0.0],
                                    [2, 0.4, 0.0, 0.0],
                                    [3, 0.0, 1.2, 0.0],
                                    [4, 0.0, 0.0,-0.4]]))
print(non_zero)   #torch.LongTensor of size 4x2
# 0  0
# 1  0
# 1  1
# 2  0
# 2  2
# 3  0

#torch.split(tensor, split_size, dim=0) 与前面torch.chunk类似
print(torch.split(x,2))
# (
#  0  0  0
#  0  0  0
# [torch.FloatTensor of size 2x3]
# ,
# 1.00000e-42 *
#   0.0000  0.0000  0.0000
#   0.0000  2.0011  0.0000
# [torch.FloatTensor of size 2x3]
# ,
# 1.00000e-38 *
#   0.0000  1.1112  0.0000
# [torch.FloatTensor of size 1x3]
# )

#torch.squeeze(input, dim=None, out=None)
# 将某一方向全部相同数据压缩掉,想想一下,x、y、z是三维的,如果z全为0,则可转化为二维。
torch_squeeze=torch.zeros(2,1,2,1,2)
print(torch_squeeze)         #torch.FloatTensor of size 2x1x2x1x2
print(torch_squeeze.size())  #torch.Size([2, 1, 2, 1, 2])
squeeze_one=torch.squeeze(torch_squeeze)
print(squeeze_one)           #torch.FloatTensor of size 2x2x2
squeeze_one=torch.squeeze(torch_squeeze,-2) #可用[-5, 4]等
print(squeeze_one)           #torch.FloatTensor of size 2x1x2x2
squeeze_one=torch.squeeze(torch_squeeze,1)
print(squeeze_one)           #torch.FloatTensor of size 2x2x1x2

#torch.stack(sequence, dim=0, out=None)
# Concatenates sequence of tensors along a new dimension.
print(x)
print(torch.stack((x,x),1));print(torch.stack([x,x],dim=2)

#torch.t(input,out=None) → Tensor  转置
print(torch.t(x))  #torch.FloatTensor of size 3x5
#print(torch.t(torch.Tensor(1,2,3,4)))  #RuntimeError: t() expects a 2D tensor, but self is 4D

#torch.take(input,indices) → Tensor 把input当做1D tensor,按照indices来选择元素
print(torch.take(x,torch.LongTensor([0,2,5])))   #torch.FloatTensor of size 3

#torch.transpose(input,dim0,dim1,out=None) → Tensor
y=torch.Tensor(1,2,3,4)
print(y)                          #torch.FloatTensor of size 1x2x3x4
print(torch.transpose(y,1,3))     #torch.FloatTensor of size 1x4x3x2 对调,从1*2*3*4——>1*4*3*2

#torch.unbind(tensor,dim=0)  移出tensor中的一维 removes a tensor dimension
#返回移出后的元组
print(torch.unbind(y))     #torch.FloatTensor of size 2x3x4   默认dim=0
print(torch.unbind(y,2))   #torch.FloatTensor of size 1x2x4

#torch.unsqueeze(input,dim,out=None)
m=torch.Tensor([1,2,3,4])
print(m)                     #torch.FloatTensor of size 4
m_zero=torch.unsqueeze(m,0)
print(m_zero)                #torch.FloatTensor of size 1x4
m_one=torch.unsqueeze(m,1)
print(m_one)                 #torch.FloatTensor of size 4x1

m_zero_to_m=torch.squeeze(m_zero)
print(m_zero_to_m)           #torch.FloatTensor of size 4
print(m==m_zero_to_m)        #torch.ByteTensor of size 4
# 1
# 1
# 1
# 1
print(m.equal(m_zero_to_m))  #True

2、Random sampling

import torch
################ Random sampling ##################################
print(torch.manual_seed(1))  #<torch._C.Generator object at 0x0000023ED56BD470>
print(torch.manual_seed(2))  #<torch._C.Generator object at 0x0000023F7532D470>
print(torch.initial_seed())  #2 返回初始生成的随机数字
print(torch.get_rng_state()) #torch.ByteTensor of size 5048

#torch.set_rng_state(new_state)
print(torch.set_rng_state(torch.get_rng_state())) #设置随机数生成状态,返回为None

#torch.bernoulli(input,out=None) → Tensor  从伯努利分布中刻画二项分布(0或1)随机数
a=torch.Tensor(3,3).uniform_(0,1)  #torch.FloatTensor of size 3x3
#先生成随机3*3Tensor,再通过uniform转换
print(torch.bernoulli(a))  #torch.FloatTensor of size 3x3
# 1  1  1
# 0  1  0
# 0  0  1
a=torch.ones(3,3)
print(torch.bernoulli(a))  #torch.FloatTensor of size 3x3
# 1  1  1
# 1  1  1
# 1  1  1

#torch.multinomial(input, num_samples, replacement=False, out=None) → LongTensor
#返回一个张量,每行包含num_samples指数多项式概率分布位于张量输入相应的行采样。
#输入行不需要求和(在这种情况下,我们使用值作为权重),但必须是非负的,并且有一个非零和。
#看了半天觉得比较复杂,等以后用时再看
print(torch.multinomial(a,3)) #torch.LongTensor of size 3x3
# 2  0  1
# 2  0  1
# 0  2  1
print(torch.multinomial(torch.Tensor([1,2,3]),3)) #torch.LongTensor of size 3
# 2 1 0
print(torch.multinomial(torch.Tensor([1,2,3,3]),4)) #torch.LongTensor of size 3
# 3 1 2 0

print(torch.multinomial(torch.Tensor([1.0,2,3]),3)) #torch.LongTensor of size 3
# 1 2 0
print(torch.multinomial(torch.Tensor([1,2.0,3,3]),4)) #torch.LongTensor of size 3
# 3 1 2 0


#torch.normal(means, std, out=None)
print(torch.normal(means=torch.arange(1,6),std=torch.arange(0.85,0,-0.2))) #torch.FloatTensor of size 5
#注意要保持means和std两个size相同
# 1.2742
# 2.5393
# 3.3374
# 4.2307
# 4.9896
print(torch.normal(mean=0,std=torch.arange(0.85,0,-0.2))) #torch.FloatTensor of size 5
#注意前面是means后面是mean
# -0.7768
# -0.1913
# -0.3296
#  0.3402
#  0.0021
x=torch.normal(std=torch.arange(0.85,0,-0.2))
print(x)            #torch.FloatTensor of size 5
print(x.mean())     #0.4534170083701611
x=torch.normal(means=torch.arange(0.85,0,-0.2))
print(x)            #torch.FloatTensor of size 5
print(x.mean())     #0.5901669651269913

#torch.rand(*sizes, out=None) → Tensor  #0到1之间均匀分布
print(torch.rand(4))  #torch.FloatTensor of size 4
# 0.6558
# 0.2958
# 0.0541
# 0.6938
print(torch.rand(2,3)) #torch.FloatTensor of size 2x3
# 0.7529  0.6873  0.0716
# 0.9869  0.4623  0.0241

#torch.randperm(n, out=None) → LongTensor
#返回随机置换后的整数。
print(torch.randperm(4)) #torch.LongTensor of size 4
# 1
# 3
# 2
# 0

#还有一些在张量上定义的随机抽样函数。
# torch.Tensor.bernoulli_() - in-place version of torch.bernoulli()
# torch.Tensor.cauchy_() - numbers drawn from the Cauchy distribution
# torch.Tensor.exponential_() - numbers drawn from the exponential distribution
# torch.Tensor.geometric_() - elements drawn from the geometric distribution
# torch.Tensor.log_normal_() - samples from the log-normal distribution
# torch.Tensor.normal_() - in-place version of torch.normal()
# torch.Tensor.random_() - numbers sampled from the discrete uniform distribution
# torch.Tensor.uniform_() - numbers sampled from the uniform distribution

 3、Serialization 序列化、Parallelism平行运算和Math operations 数学运算

from __future__ import print_function
import torch
import numpy as np
import pandas as pd
from pandas import Series,DataFrame

################ Serialization ##################################
#torch.save(the_model,PATH)
#torch.load('tensors.pt')
#torch.load(PATH)

################ Parallelism ##################################
#torch.get_num_threads()  → int
#torch.set_num_threads(int)

################ Math operations ##################################
#torch.abs(input, out=None) → Tensor 求绝对值
#torch.add(input, value, out=None) out=tensor+value
#torch.add(input, value=1, other, out=None) out=input+(other∗value)
#torch.mul(input,value,out=None)  #相乘,value可以为数字,也可以为与t1元素个数相同Tensor
a_tensor=torch.IntTensor([1,2,3])  #[torch.IntTensor of size 3]
print(torch.dot(a_tensor,a_tensor)) #14 a_tensor不能为size numb*numb,只能为size numb
print(torch.mul(a_tensor,a_tensor)) #1 4 9 [torch.IntTensor of size 3]
#torch.div(input, value, out=None) #与mul类似 相除,如果是IntTensor类型,只保留整数部分,小数部分舍去(注意不是四舍五入)
#torch.ceil(input, out=None) → Tensor    向上取整,input类型不能为IntTensor,FloatTensor可以
#torch.erfinv(tensor, out=None) → Tensor 反误差函数,x区间为[-inf,inf],y区间为[-1,1],即给的是y,求x值
#torch.fmod(input, divisor, out=None) → Tensor 求元素mod,即求余数  % 即可  与下面torch.remainder相同,没有取余计算,// 不可以
# torch.frac(tensor, out=None) → Tensor     求每个元素小数部分
# torch.exp(tensor, out=None) → Tensor    求每个元素的指数值
#torch.log(input, out=None) → Tensor      求每个元素对数值
#torch.log1p(input, out=None) → Tensor  yi=log(xi+1)
#torch.neg(input, out=None) → Tensor    out=−1∗input  可以直接在前面加负号  如: -a_tensor
#torch.pow(input, exponent, out=None)  outi=x(i)的exponent次方 或者out(i)=x(i)的exponent(i)次方 torch.pow(torch.Tensor([1,3]),torch.Tensor([1,2]))  #1 9  numpy中为np.power()
#torch.pow(base, input, out=None)  #outi=base的input(i) 次方   base (float),input (Tensor) 例如:torch.pow(2,torch.Tensor([1,2])  #2 4
#torch.reciprocal(input, out=None) → Tensor  1.0/x  求Tensor的倒数   也可以1/input
#torch.remainder(input, divisor, out=None) → Tensor  求余数 input (Tensor),The dividend divisor (Tensor or float)
#torch.round(input, out=None) → Tensor 四舍五入
#torch.sqrt(input, out=None) → Tensor 求元素的平方根
#torch.rsqrt(input, out=None) → Tensor 求元素平方根倒数,负数返回结果为nan
#torch.sigmoid(input, out=None) → Tensor 求元素的sigmod值,位于0到1之间,S型函数
#torch.trunc(input, out=None) → Tensor 取元素整数部分

x=torch.Tensor([-1,-2,3])
t=torch.ones(3,2)
t1=torch.ones(1,6)
t2=torch.ones(6,1)
#torch.add(input, value, out=None) out=tensor+value
print(torch.add(x,20))#每一个都加20
# 19
# 18
# 23

#torch.add(input, value=1, other, out=None) out=input+(other∗value)
#input (Tensor) – the first input Tensor
# value (Number) – the scalar multiplier for other
# other (Tensor) – the second input Tensor
print(torch.add(x,1,x))   x+1*x  中间1为配的系数
# -2
# -4
#  6

#torch.mul(input,value,out=None)  #value可以为数字,也可以为与  t1元素个数相同Tensor  相乘
print(torch.mul(t1,10))   #torch.FloatTensor of size 1x6
print(torch.mul(t1,t2))   #torch.FloatTensor of size 6x6
print(torch.mul(t2,t1))   #torch.FloatTensor of size 6x6
t2=torch.ones(7,1)
print(torch.mul(t1,t2))   #torch.FloatTensor of size 7x6
t2=torch.ones(7,2)        #看来也不能乱乘
#print(torch.mul(t1,t2))   #RuntimeError: inconsistent tensor size
t1=torch.Tensor([1,2,3,4])
t2=torch.Tensor([[0,1],[0,1]])
#下面这个也报警告
# print(torch.mul(t1,t2))  #torch.FloatTensor of size 4
# print(torch.mul(t2,t1))  #torch.FloatTensor of size 2x2

#torch.div(input, value, out=None)
#out=tensor/value   outi=inputi/otheri
print(torch.div(t1,2))  #torch.FloatTensor of size 4
 # 0.5000
 # 1.0000
 # 1.5000
 # 2.0000
#下面除法也会出现警告 UserWarning: self and other not broadcastable
#print(torch.div(t1,t2)) #torch.FloatTensor of size 4
# inf
#   2
# inf
#   4
#print(torch.div(t2,t1)) #[torch.FloatTensor of size 2x2]
 # 0.0000  0.5000
 # 0.0000  0.2500

#torch.addcdiv(tensor, value=1, tensor1, tensor2, out=None) → Tensor
# tensor (Tensor) – the tensor to be added
# value (Number, optional) – multiplier for tensor1 ./ tensor2
# tensor1 (Tensor) – Numerator tensor
# tensor2 (Tensor) – Denominator tensor
t=torch.ones(3,2)
t1=torch.ones(1,6)
t2=torch.ones(6,1)
#加上后面两个相除,加上后面两个相乘,中间还可以配个系数,不过报警告
#UserWarning: self, tensor1, and tensor2 not broadcastable, but have the same number of elements
#print(torch.addcdiv(t,0.1,t1,t1)) #torch.FloatTensor of size 3x2
# 1.1000  1.1000
# 1.1000  1.1000
# 1.1000  1.1000
#print(torch.addcmul(t,0.1,t1,t1)) #torch.FloatTensor of size 3x2
# 1.1000  1.1000
# 1.1000  1.1000
# 1.1000  1.1000


# torch.lerp(start, end, weight, out=None)
# outi=starti+weight∗(endi−starti)
print(t1,t2)
print(torch.lerp(t1,t2,0.5))
# 0.1000
# 0.9000
# 1.6000
# -2.4000
# [torch.FloatTensor of size 4]
#
# 0
# 1
# 0
# 1
# [torch.FloatTensor of size 2x2]
#
# 0.0500
# 0.9500
# 0.8000
# -0.7000
# [torch.FloatTensor of size 4]

#torch.floor(input, out=None) → Tensor
#与ceil相对应的,floor

#torch.clamp(input, min, max, out=None) → Tensor
#       | min, if x_i < min
# y_i = | x_i, if min <= x_i <= max
#       | max, if x_i > max
print(torch.clamp(t1,0,1)) #torch.FloatTensor of size 4
# 0.1000
# 0.9000
# 1.0000
# 0.0000
#必须要输入min或者max
print(torch.clamp(t1,min=0)) #torch.FloatTensor of size 4
# 0.1000
# 0.9000
# 1.6000
# 0.0000
print(torch.clamp(t1,max=1)) #torch.FloatTensor of size 4
#  0.1000
#  0.9000
#  1.0000
# -2.4000
print(torch.clamp(torch.randn(5,5),min=0,max=1)) #torch.FloatTensor of size 5x5
# 0.9985  0.4794  0.0000  0.1223  0.0000
# 0.0000  0.0000  0.0000  0.0000  0.1613
# 0.0527  0.1433  0.6362  0.0000  0.0000
# 0.4906  0.0000  0.0000  0.9332  0.0000
# 0.0000  0.0000  1.0000  0.3525  0.9937

#torch.erf(tensor, out=None) → Tensor
#Computes the error function of each element 计算每个元素的误差函数,S型,-1到1之间
print(torch.erf(torch.Tensor([-100,-10,-2,-1,0,0.5,1,2,10,100]))) #torch.FloatTensor of size 10
# -1.0000
# -1.0000
# -0.9953
# -0.8427
#  0.0000
#  0.5205
#  0.8427
#  0.9953
#  1.0000
#  1.0000

 4、Math operations 数学运算

import torch
###################################  Reduction operation  ##################################
#注意:dim=0,按照列来处理的,dim=1,按照行来处理的,python数据处理列比行方便,0在1前
#torch.sum(input) → float 得到一个值,类加值
#torch.sum(input, dim, keepdim=False, out=None) → Tensor 对行或列加总,得到行或者列
#torch.cumprod(input, dim, out=None) → Tensor 累乘
#torch.cumsum(input, dim, out=None) → Tensor  累加
#torch.dist(input, other, p=2) → float 求 p范数 input:(Tensor), other:(Tensor), p:(float, optional)
#torch.mean(input) → float 求元素均值,得到一个值
#torch.mean(input, dim, keepdim=False, out=None) → Tensor
#torch.median(input) → float
#torch.median(input, dim=-1, keepdim=False, values=None, indices=None) -> (Tensor, LongTensor)
#median与mean类似,整体和部分处理
#torch.mode(input, dim=-1, keepdim=False, values=None, indices=None) -> (Tensor, LongTensor)
#返回元组,两个元素,每行或者每列最小值和元素所在位置
#torch.norm(input, p=2) → float 返回p范数值 注意与torch.normal()区别
#torch.norm(input, p, dim, keepdim=False, out=None) → Tensor  与前面类似
#torch.prod(input) → float 返回一个值,所有元素累乘值
#torch.prod(input, dim, keepdim=False, out=None) → Tensor
#torch.std(input, unbiased=True) → floa  生成无偏的标准差
#torch.std(input, dim, keepdim=False, unbiased=True, out=None) → Tenso
#torch.var(input, unbiased=True) → float
#torch.var(input, dim, keepdim=False, unbiased=True, out=None) → Tensor

###################################  Comparison operation  ##################################
#torch.eq(input, other, out=None) → Tensor    other可以为Tensor或者float,判断两个是否相等,得到0 1 Tensor
#torch.equal(tensor1, tensor2) → bool  True 或者False
#torch.ge(input, other, out=None) → Tensor 与eq类似,判断是否大于等于other,返回0 1 Tensor
#torch.gt(input, other, out=None) → Tensor 判断是否大于other,返回0 1 Tensor
#torch.le(input, other, out=None) → Tensor 判断是否小于等于other,返回0 1 Tensor
#torch.lt(input, other, out=None) → Tensor 判断是否小于other,返回0 1 Tensor
#torch.max(input) → float
#torch.max(input, dim, keepdim=False, out=None) -> (Tensor, LongTensor)
#torch.max(input, other, out=None) → Tensor 取两个Tensor中较大的元素组成Tensor
#torch.min(input) → float
#torch.min(input, dim, keepdim=False, out=None) -> (Tensor, LongTensor)
#torch.min(input, other, out=None) → Tensor 取两个Tensor中较小的元素组成Tensor
#torch.ne(input, other, out=None) → Tensor  不等于,other可以为Tensor或者float
#torch.sort(input, dim=None, descending=False, out=None) -> (Tensor, LongTensor) 返回Tuple
x=torch.randn(3,3)
sorted,indices=torch.sort(x)
print(sorted,indices)
# -1.7012  0.2619  0.3892
# -1.8940 -0.7567  1.2057
# -0.8224  0.7787  1.3752
# [torch.FloatTensor of size 3x3]
# 0  2  1
# 2  1  0
# 2  1  0
# [torch.LongTensor of size 3x3]

#torch.kthvalue(input, k, dim=None, keepdim=False, out=None) -> (Tensor, LongTensor)
# k:第k个最小元素,返回第k个最小元素
#torch.topk(input, k, dim=None, largest=True, sorted=True, out=None) -> (Tensor, LongTensor)
#返回前k个最大元素,注意是前k个,largest=False,返回前k个最小元素

###################################  Comparison operation  ##################################
#torch.cross(input, other, dim=-1, out=None) → Tensor  向量积、叉乘与mul点乘对应
x=torch.Tensor([1,2,3])
y=torch.Tensor([2,5,1])
print(torch.cross(x,y))   #https://baike.baidu.com/item/%E5%90%91%E9%87%8F%E7%A7%AF/4601007?fr=aladdin
# -13   2*1-3*5
#   5   3*2-1*1
#   1   1*5-2*2
# [torch.FloatTensor of size 3]
#torch.trace(input) → float  得到主对角线和
#torch.diag(input, diagonal=0, out=None) → Tensor  1、一维到二维Tensor  2、二维到一维Tensor,一维就是主对角线上,有参数可以调节
a=torch.randn(3)
print(a)
# 2.1126
# -1.4150
# 0.4451  [torch.FloatTensor of size 3]

print(torch.diag(a))
#  2.1126  0.0000  0.0000
#  0.0000 -1.4150  0.0000
#  0.0000  0.0000  0.4451
# [torch.FloatTensor of size 3x3]

a=torch.randn(3,3)
print(a)
#  0.6810 -2.1620 -0.3158
#  0.0545  1.1060  1.3524
#  0.1481 -1.1468 -0.0113
# [torch.FloatTensor of size 3x3]
print(torch.diag(a,0))
#  1.0596
#  1.2221
#  0.2311
# [torch.FloatTensor of size 3]
print(torch.diag(a,1))
#  1.8588
# -0.2285
# [torch.FloatTensor of size 2]

#torch.tril(input, diagonal=0, out=None) → Tensor 删除Tensor部分对角线数据
#torch.triu(input, diagonal=0, out=None) → Tensor 与tril类似
#torch.inverse(input, out=None) → Tensor  求Tensor的逆
#torch.mm(mat1, mat2, out=None) → Tensor  两个Tensor的矩阵乘积
data=[[1,2],[3,4]]
tensor=torch.FloatTensor(data)
tensor
Out[23]:
tensor([[ 1.,  2.],
        [ 3.,  4.]])
np.matmul(data,data)
Out[24]:
array([[ 7, 10],
       [15, 22]])
torch.mm(tensor,tensor)
Out[25]:
tensor([[  7.,  10.],
        [ 15.,  22.]])
#torch.mv(mat, vec, out=None) → Tensor mat = torch.randn(2, 3) # [torch.FloatTensor of size 2x3] vec = torch.randn(3) # [torch.FloatTensor of size 3] torch.mv(mat, vec) # -2.0939 # -2.2950 # [torch.FloatTensor of size 2] # #torch.qr(input, out=None) -> (Tensor, Tensor) 齐次分解

 

转载于:https://www.cnblogs.com/bawu/p/8252355.html

;