pytorch 数据创建
创建张量
对于pytorch最基础的数据结构是张量,张量即数学上的多维向量。创建张量的方式大致有以下这些方式
- 通过list、tuple、ndarray创建tensor
- 依据数值创建
- 依据概率分布创建
1. 通过list、tuple、ndarray创建tensor
import numpy as np
import torch
# 通过list 创建张量
num_list = [1,2,3,4,5,6]
tensor_from_list = torch.tensor(num_list)
print(tensor_from_list)
# 通过tuple 创建张量
num_tuple = (1,2,3,4,5,6)
tensor_from_tuple = torch.tensor(num_tuple)
print(tensor_from_tuple)
# 通过ndarray 创建张量
num_array = np.array([1,2,3,4,5,6])
tensor_from_array = torch.tensor(num_array)
print(tensor_from_array)
2. 依据数值创建tensor
import numpy as np
import torch
tensor_like = torch.tensor([
[1,2,4],
[2,3,5]
])
# 全1张量
t = torch.ones([3,3]) # 3x3 张量
print(t)
# 全1张量 维度跟随
t = torch.ones_like(tensor_like)
print(t)
# 全0张量
t = torch.zeros([3,3])
print(t)
# 全0张量维度跟随
t = torch.zeros_like(tensor_like)
print(t)
# 自定义数字张量 full(dimension,number)
t = torch.full((3,3),1.1)
print(t)
# 自定义数组张量 维度跟随
t = torch.full_like(tensor_like,1.1)
print(t)
# 等差数列张量arange(start,end,step), 创建区间[start,end)
t = torch.arange(1,10,2)
print(t)
# 均分张量linspace(start,end,member), 创建区间[start,end]
t = torch.linspace(2,10,6)
print(t)
# 对数均分张量 logspace(start,end,member)
t = torch.logspace(2,10,6)
print(t)
# 单位矩阵 二维概念
t = torch.eye(5)
print(t)
3. 依据概率分布创建张量
- 正态分布
- 标准正态分布
- 均匀分布
- 随机排列
- 伯努利分布(no)
3.1 正态分布
import numpy as np
import torch
# 正态分布随机采样
# tensor tensor
print("-"*10,"mean:tensor,std:tensor","-"*10)
mean = torch.arange(1,5,dtype=torch.float)
print("mean:",mean)
std = torch.arange(1,5,dtype=torch.float)
print("std:",std)
mat = torch.normal(mean,std)
print("mat:",mat)
# scalar scalar
print("-"*10,"mean:scalar,std:scalar","-"*10)
mean = 0
print("mean:",mean)
std = 1
print("std:",std)
mat = torch.normal(mean,std,size=(4,))
print("mat:",mat)
# scalar tensor
print("-"*10,"mean:scalar,std:tensor","-"*10)
mean = torch.arange(1,5,dtype=torch.float)
print("mean:",mean)
std = 1
print("std:",std)
mat = print("mat:",mat)
# tensor scalar
print("-"*10,"mean:scalar,std:tensor","-"*10)
mean = 0
print("mean:",mean)
std = torch.arange(1,5,dtype=torch.float)
print("std:",std)
mat = torch.normal(mean,std)
print("mat:",mat)
3.2 标准正态分布
import numpy as np
import torch
tensor_like = torch.tensor([1,2,3,4])
mat = torch.randn([3,3])
print(mat)
mat = torch.randn_like(tensor_like)
print(mat)
3.3 均与分布
import numpy as np
import torch
tensor_like = torch.tensor([1,2,3,4])
t = torch.rand([3,3])
print(t)
t = torch.rand_like(tensor_like)
print(t)
t = torch.randint([3,3])
print(t)
t = torch.randint_like(tensor_like)
print(t)
3.4 随机排列
t = torch.randperm(4) # 只能是1维
print(t)
4. ndarray与 tensor 相互转换
import numpy as np
import torch
# ndarray to tensor
# 方法1
arr1 = np.array([1,2,3,4,5,6])
tensor1 = torch.tensor(arr1)
print(tensor1)
# 方法2
arr2 = np.array([1,2,3,4,5,6])
tensor2 = torch.from_numpy(arr2)
print(tensor2)
# tensor to ndarray
arr3 = tensor2.numpy()
print(type(arr3))
其中from_numpy() 方法 所创建的tensor与ndarray共享内存
5. 数据搬运到GPU
import torch
# 创建时在GPU上
a = [1,2,3,4]
t = torch.tensor(a,device='cuda' if torch.cuda.is_available() else 'cpu')
# 后续搬运至GPU
a = torch.tensor([1,2,3,4])
t = a.devide('cuda')