pytorch1——数据创建

创建张量

对于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')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值