张量创建和索引and切片

 

目录

创建张量

从 numpy中创建        import from numpy

从list中创建          import from list

生成未初始化的数据

生成初始化了的数据

设置默认类型        set default type

常用api

full 方法应用

arange 方法应用

linspace 和 logspace

ones / zeros / eye 的使用

 randperm函数

索引与切片

索引

切片

起始,结束型

带步长

使用  ...    优雅~

切取某个维度数据        select by specific index

select by mask

select by flatten index


创建张量

从 numpy中创建        import from numpy

原来的数据类型在创建后基本保持一一对应

a=np.array([2,3.3])
print(torch.from_numpy(a))        #从numpy导入的float是double类型

b=np.ones([2,3])
print(torch.from_numpy(b))


从list中创建          import from list

        在数据量小的情况下可以使用

a=torch.tensor([2,3.4])
print(a)

b=torch.tensor([[2,3.4],[1,2.3]])   #使用列表创建2维张量
print(b)


生成未初始化的数据

几种方法

        torch.empty()        顾名思义,给出shape就能生成随机数据

        torch.Tensor()        给出shape 就能生成对应维度随机数据

        torch.IntTensor()        生成对应维度整型随机数据

        torch.FloatTensor()        生成对应维度浮点型随机数据

a=torch.empty(2,3)
print(a)

b1=torch.Tensor(2,3)
print(b1)
b2=torch.Tensor(2,3,3)
print(b2)

c=torch.IntTensor(2,3)
print(c)

d=torch.FloatTensor(2,3)
print(d)


生成初始化了的数据

随机初始化

        rand:从0~1之间随机取值,使数据均匀的分布在0和1之间,不包括1

        rand_like:给出一个tensor,他会把shape送进rand()操作

        randint(min,max,[ ]):均匀采样 [min~max) 之间的数,第三个参数是它的shape

正态分布类型

        randn(),输入shape即可输出均值为0,方差为1的数 

a=torch.rand(3,3)
print(a)
b=torch.rand_like(a)
print(b)

a=torch.randint(1,9,[3,2])
print(a)


a=torch.randn(3,3)
print(a)

设置默认类型        set default type

 使用torch.tensor()生成的数据类型默认为FloatTensor,若要改变默认,可用下面方法

torch.set_default_tensor_type(torch.DoubleTensor)    #输入类型

a=torch.tensor ([1.2,3])
print(a.type())            #改变前

torch.set_default_tensor_type(torch.DoubleTensor)

b=torch.tensor ([1.2,3])
print(b.type())            #改变后


常用api


full 方法应用

torch.full([ ],5):表示全部用5填充数据,[ ] 表示维度

a=torch.full([2,3],5)   #将2维数据都变为5
print(a)

b=torch.full([],5)      #什么都不写表示标量,0维
print(b)

c=torch.full([2],5)     #里面写一个数字表示是一维的,size为本身
print(c)


arange 方法应用

arrange(起始,结束,步长)        生成等差数列

        步长默认为1,起始默认为0,不包含结束

a = torch.arange(0,14)
print(a)

b = torch.arange(4,14,2)
print(b)


linspace 和 logspace

linspace(1,4,steps=4 )          表示从1到4 均匀分为4块

logspace(1,4,steps=4)               表示先均匀分为 4 块得到相应数值,在对应成为 4 的幂返回

a = torch.linspace(0,10,steps=4)        #steps表示均匀分为几块
print(a)

b = torch.linspace(0,10,steps=11)
print(b)

c = torch.logspace(0,9,10)          #0~-9按一具体数值均分为10份,返回10的幂,幂为分割后的具体数值
print(c)                            #这里分割数值为1,返回10的0次到9次幂

d = torch.logspace(0,-9,10)         #0~-9按一具体数值均分为10份,返回10的幂,幂为分割后的具体数值
print(d)


ones / zeros / eye 的使用

        torch.ones( )        给出shape全部赋值为1

        torch.zeros( )        给出shape全部赋值为0

                 以上两种可以使用_like()方法传入一个tensor使用

        torch.eye()        给出shape或维度生成单位矩阵(对角矩阵)

a = torch.ones(2,2)    #全1
print(a)

b = torch.zeros(2,2)    #全0
print(b)

c = torch.eye(2,3)    #对角
print(c)
d = torch.eye(2)        #对角
print(d)

n = torch.ones_like(b)    #将b全1
print(n)

                                 


 randperm函数

torch.randperm(n)                把 [ 0~n)这些数随机打乱输出

a = torch.randperm(2)
print(a)

b=torch.randperm(2)
print(b)


索引与切片

与Python中的差不多


索引

a = torch.rand(4,3,28,28)
print(a[0].shape)            #表示1,2,3的shape 
print(a[0,0].shape)        #表示2,3维
print(a[0,0,2,3])        #表示0维,是标量


切片

切片就是要遵循        起始:结束:步长        原则任意切,没什么不同,就是可以多切几个


起始,结束型

a = torch.rand(4,3,28,28)
print(a[:2].shape)          #表示第0维有2个元素
print(a[:2,:1,:,:].shape)   #第0维2个,第一维1个
print(a[:2,1:,:,:].shape)       #第0维2个,第1维第一个到最后一个
print(a[:2,-1:,:,:].shape)       #第一维最后一个到最后一个


带步长

a = torch.rand(4,3,28,28)
print(a[:,:,0:28:2,0:28:2].shape)   #步长为2
print(a[:,:,::2,::2].shape)         #步长为2


使用  ...    优雅~

a = torch.rand(4,3,28,28)
m = a[...].shape        #全部都有
n = a[0,...].shape      #第0维第0个

o = a[:,1,...].shape    #第一维第1个
p = a[...,:2].shape     #最后一维前俩个


切取某个维度数据        select by specific index

a = torch.rand(4,3,28,28)
b = a.index_select(0,torch.arange(3)).shape   #取第0维的前三个
print(b)
c = a.index_select(1,torch.arange(1,2)).shape      #取第一维的第一个
print(c)
d = a.index_select(2,torch.arange(5)).shape       #取第二维的前5个
print(d)


select by mask

torch.masked_select(x,mask)                 相当于对X进行掩摸操作

        该函数主要用来选取x数据中的mask性质的数据,如mask=x.ge(0.5)表示选出大于0.5的所有数据,并且输出时将其转换为了1维的打平tensor数据

x = torch.randn(3,4)    #生成一个正态分布的tensor
mask = x.ge(0.5)        #条件:大于0.5的 1其余0
print(mask)
a = torch.masked_select(x,mask)     #判断X中满足条件的
print(a)
print(a.shape)


select by flatten index

 torch.take(a, torch.tensor([0,2,5])        表示打平后取a中索引为 0,2,5 的数据

先将张量数据打平为一个1维的张量数据(依次排序下来成为一个数据列),然后按照索引数据

a = torch.tensor([[4,3,5],
                  [6,7,8]])
b = torch.take(a,torch.tensor([0,2,5]))
print(b)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

onlywishes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值