Pytorch的tensor常见操作

Pytorch包类型:tensor

1、输入

1.1 arange reshape

import torch
a=torch.arange(16).reshape(1,1,4,4)
# a = torch.tensor([[[[ 0,  1,  2,  3], [ 4,  5,  6,  7], [ 8,  9, 10, 11], [12, 13, 14, 15]]]])
print(a)

1.2 randint clamp

torch.randint(low, high, size):随机生成指定范围 [low,high) 的 size 大小的整数 tensor

→ numpy → uniform

clamp:将输入的tensor的每个元素限制到特定区域,输出新的tensor

     | min, if xi < min
yi = | xi, if min <= xi <= max
     | max, if xi > max
import torch
a=torch.randint(low=0,high=10,size=(5,2))
print(a)
a=torch.clamp(a,3,7)
print(a)

import random
a = random.randint(1,10) # 生成1-10之间的随机整数,包括 1 和 10

1.3 dtype size

shape???(TBD)

tensor.dtype:查看tensor的类型

tensor.size():查看tensor的size

tensor.size(0):查看tensor第一维度的size

import torch
a = torch.tensor([1,2,-100], dtype=torch.bool)
print(a)    # tensor([True, True, True])
print(a.dtype,a.size()) 
b = a.long()
print(b)    # tensor([1, 1, 1])
print(b.dtype)  # torch.int64

1.4 empty ones_like zeros_like

import torch
input = torch.empty(2, 3)
a = torch.ones_like(input)
print(input)
print(a)

1.5 cat stack vstack hstack

cat 只是拼接不升维

stack的dim还是没有太搞懂,反正会升一个维度。(TBD)

import torch
a = torch.ones((2,3))
b = torch.arange(6).reshape((2,3))
c = torch.cat((a,b))
print(c)
c = torch.cat((a,b),dim=1)
print(c)
c = torch.stack((a,b))
print(c)
c = torch.stack((a,b),dim=1)
print(c)
c = torch.stack((a,b),dim=2)
print(c)
c = torch.vstack((a,b))  # 等同于 c = torch.cat((a,b))
print(c)
c = torch.hstack((a,b))  # 等同于c = torch.cat((a,b),dim=1)
print(c)

注意:高版本的torch不再支持vstack、hstack

1.6 flatten

flatten(data, start_dim, end_dim) 给tensor型的数据降维,end_dim省略的话等于最高维

import torch
a = torch.arange(24).reshape(2,3,4)+1
print(a)
b = torch.flatten(a,0) # 将tensor的0-2维度拼接:24
print(b)
b = torch.flatten(a,1) # 将tensor的1-2维度拼接:2×12
print(b)
b = torch.flatten(a,2) # 将tensor的2-2维度拼接:2×3×4
print(b)
b = torch.flatten(a,0,1) # 将2×3×4变成6×4
print(b)
b = torch.flatten(a,1,2) # 将2×3×4变成2×12
print(b)

1.7 shape size

a.shape
a.size()
# 二者含义相同

2、数据类型转换

  1. Tensor 的 int、float 数据类型转换
    • 在Tensor后加 .long().int().float().double()等即可
  2. Tensor 与 numpy 数据类型转换:
    • Tensor → Numpy 使用 data.numpy(),data为Tensor变量
    • Numpy → Tensor 使用 torch.from_numpy(data),data为numpy变量
  3. Tensor 与 Python 数据类型转换:
    • Tensor → 单个Python数据,使用data.item(),data为Tensor变量且只能为包含单个数据
    • Tensor → Python list,使用data.tolist(),data为Tensor变量,返回shape相同的可嵌套的list
  4. 剥离出一个tensor参与计算,但不参与求导data.detach()
  5. Tensor 在 gpu 和 cpu 上存储转换:
    • cpu → gpu 使用 data.cuda(),data为Tensor变量
    • gpu → cpu 使用 data.cpu(),data为Tensor变量

2.0 type type_as

用于tensor类型转换,后面有空补充案例(TBD)

Pytorch框架之tensor类型转换(type, type_as)_NULL not error的博客

2.1 item tolist

tensor.item():将只有一个元素的tensor转换为标量。

tensor.tolist():将tensor转换为shape相同列表。

Pytorch中Tensor数据类型转换

import torch
x = torch.tensor([1])
print(x.dtype)
print(x.item())
print(type(x.item()))
y = torch.tensor([2,3,4,5])
print(y.tolist())
print(type(y.tolist()))

2.2 .clone() .detach() .data

tensor.clone():深拷贝,clone后创建一个新的地址存放数据。

tensor.detach():浅拷贝,剥离出的 tensor 参与计算,但不参与求导(相当于把原 tensor 的值用另一个索引拿出来了)

import torch
a = torch.tensor(1.0, requires_grad=True)
b = a.clone()
c = a.detach()	#⭐detach将requires_grad 属性设置为False
a.data *= 3
b += 1
c += 1
print(a)
print(a.data)
print(a.requires_grad)
print(b)
print(c)
print(c.requires_grad)
'''
输出结果:
tensor(4., requires_grad=True)
tensor(4.)
True
tensor(2., grad_fn=)
tensor(4.)      # detach()后的值随着a的变化出现变化
False
'''

3、排序 求最大最小值

3.1 sort argsort

sort:对输入数据排序,返回两个值,即排序后的数据values和其在原矩阵中的索引indices

argsort:同torch.sort(),但只返回indices

torch.sort()和torch.argsort()简要介绍_两分先生的博客

1、有两种使用方式 torch.argsort(a,dim=0,descending = True)
a.argsort(descending=True)

2、有两个参数 默认dim = 1 对行向量做排序,dim = 0 时对列向量排序 默认descending = False 向量升序排序

import torch
a = torch.tensor([[2,3,1],[0,5,6]])
print(a)
print('_______sort_______')
print(torch.sort(a))
print(torch.sort(a,dim=0))
print(torch.sort(a,dim=0,descending=True))
print('_______argsort_______')
print(torch.argsort(a))
print(torch.argsort(a,dim=0 ))
print(torch.argsort(a,dim=0,descending = True))
print('_______ _______')
print(a.argsort(descending=True))

3.2 max argmax min argmin

找输入数据最大/小值,返回最大/小值和对应索引。

torch.max中keepdim的作用-徐徐图之

1、同sort,有两种表示方式
torch.max(a,dim=1, keepdim=True)
a.max(dim=1, keepdim=True)

2、同样有两个参数 dim=0找每一列的最大值,dim=1找每一行的最大值。 keepdim表示是否需要保持输出的维度与输入一样。
keepdim=True表示输出和输入的维度一样
keepdim=False表示输出的维度被压缩了,也就是输出会比输入低一个维度。

import torch
a = torch.tensor([[2,3,1],[0,5,6]])

print('_______max_______')
print(torch.max(a,dim=1))
print(torch.max(a,dim=1)[1].shape)
print('_______max&keepdim_______')
print(torch.max(a,dim=1, keepdim=True))
print(torch.max(a,dim=1, keepdim=True)[1].shape)
print('_______argmax_______')
print(torch.argmax(a,dim=1, keepdim=True))
import torch
a = torch.tensor([[2,3,1],[0,5,6]])	# 2x3
b = torch.tensor([[5,2,1],[3,1,4]])

print(torch.max(a,b))	# 2x3

你可能感兴趣的:(python学习,pytorch,python)