pytorch张量

import torch
a=torch.randn(2,3)#随机生成2行3列的矩阵,默认torch.FloatTensor类型
print(a)
print(a.type())
print(a.shape)

输出

tensor([[ 0.8583,  0.0906, -1.2922],
        [-0.6729, -0.6208, -1.0874]])
torch.FloatTensor
torch.Size([2, 3])

import cv2
a=torch.rand(1,2,3)#生成1页2行3列的3维张量,数值[0,1]随机均匀生成
print(a)
print(a.type())
print(a.shape)

输出

tensor([[[0.2478, 0.3851, 0.9504],
         [0.8396, 0.1004, 0.4696]]])
torch.FloatTensor
torch.Size([1, 2, 3])

创建tensor:

a=torch.tensor(列表(标量))

区别于a=torch.Tensor(2,3),创建一个shape为2行3列的未初始化的tensor

a=torch.rand()

a=torch.randn()

a=torch.full([2,3],7) 创建一个2行3列值全为7的tensor

torch.linespace/logspace线性等分/对数等分

pytorch张量

 pytorch张量

pytorch张量

索引与切片

lst[start:stop:step] 列表的切片

lst[index] 列表的索引

import torch
a=torch.rand(4,3,28,28)
print(a[0].shape)
print(a[0,0].shape)
print(a[0,0,0,0])#索引
print(a[0:2,:,:3,:].shape)#切片

输出 

torch.Size([3, 28, 28])
torch.Size([28, 28])
tensor(0.4941)
torch.Size([2, 3, 3, 28])
print(a.index_select(2,torch.arange(8)).shape)
(4,3,28,28)对应索引0,1,2,3,取第三维度索引0-7

torch.Size([4, 3, 8, 28]

维度变化

import torch
a=torch.rand(4,3,28,28)
print(a.shape)
print(a.unsqueeze(0).shape)#在第一个维度之前增加一个维度
print(a.unsqueeze(0).squeeze(0).shape)#增加一个维度再挤压掉一个维度,只能挤压1所在的维度
print(a.view(4,2352).shape)#2352=3*28*28
b=torch.rand(1,32,1,1)
print(b.expand(4,32,28,56).shape)#不断复制首元素改变shape便于运算,只能改变1所在的维度

输出

torch.Size([4, 3, 28, 28])
torch.Size([1, 4, 3, 28, 28])
torch.Size([4, 3, 28, 28])
torch.Size([4, 2352])
torch.Size([4, 32, 28, 56])

 

c=torch.rand(4,3,28,28)
print(c.transpose(1,3).shape)#按索引交换两个维度
print(c.permute(0,2,3,1).shape)#按索引对维度重新排序

输出

torch.Size([4, 28, 28, 3])
torch.Size([4, 28, 28, 3])

上一篇:centos 时间同步


下一篇:维度的变换