(1)pytorch数据处理

1什么是pytorch

是一个基于numpy的科学计算包,主要提供了两种功能

  • 作为numpy的替代者,提供了使用gpu的能力
  • 作为深度学习的平台,向用户提供了灵活性和速度

2基本元素操作-Tensor

与numpy中的ndarry数据结构较为类似,最大的区别在于Tenseo可以利用gpu进行加速。使用import torch导入torch模块。

  • 创建一个空的矩阵x = troch.empty(5,3),矩阵中的数值是未知的不代表任何含义;
  • 创建一个全为0的矩阵.zero(),并使用dtype=来只带数据的类型;
  • 直接通过数据创建相应的矩阵x = torch.tensor([2.5, 3.5])
  • 通过已有矩阵的尺寸创建一个与之相同尺寸的矩阵x = x.new_ones(5,3, dtype=?)或者使用y = torch.randn_like(x, dtype= ?)
  • 张量形状打印可以使用.size()的方式进行

3 基本运算操作

主要包括有加减乘除这四种运算

  • 加法操作:print(x+y)torch.add(x , y),原地置换方式y.add_(x)即x+y的结果直接存储到y中
  • 减法操作:print(x-y)torch.sub(x , y),原地置换方式y.sub_(x)即x+y的结果直接存储到y中
    -乘法操作:print(x*y)torch.mul(x , y),原地置换方式y.mul_(x)即x+y的结果直接存储到y中
  • 除法操作:print(x/y)torch.div(x , y),原地置换方式y.div_(x)即x+y的结果直接存储到y中

4 张量的切片操作

在PyTorch中,可以使用切片操作来获取张量的子集。切片操作允许您选择张量中的特定维度上的特定元素或子张量,并返回一个新的张量。以下是一些常见的切片操作示例:

  1. 选择特定索引的元素:
import torch
# 创建一个张量
a = torch.tensor([1, 2, 3, 4, 5])
# 选择单个元素
element = a[0]
print(element)  # 输出: tensor(1)
# 选择多个元素
elements = a[1:4]  # 选择索引为1到3的元素
print(elements)  # 输出: tensor([2, 3, 4])
  1. 切片操作也适用于多维张量:
import torch
# 创建一个二维张量
a = torch.tensor([[1, 2, 3], [4, 5, 6]])
# 选择特定行和列
row = a[0, :]  # 选择第一行的所有元素
print(row)  # 输出: tensor([1, 2, 3])
column = a[:, 1]  # 选择第二列的所有元素
print(column)  # 输出: tensor([2, 5])
  1. 还可以使用步长来选择间隔的元素:
import torch
# 创建一个张量
a = torch.tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 使用步长选择元素
subset = a[1:8:2]  # 从索引1到7之间选择每隔一个元素
print(subset)  # 输出: tensor([2, 4, 6, 8])

在这些示例中,我们使用切片操作通过指定索引或范围来选择张量的子集。要注意的是,在PyTorch中,切片是基于0索引的,所以第一个元素的索引为0。使用:表示连续索引,而使用步长(:后的数字)表示间隔。
切片操作返回的是原始张量的视图(view),即与原始张量共享内存,因此在原始张量或切片张量上的更改会相互影响。如果需要创建原始张量的副本,可以使用.clone()方法复制张量。例如:subset = a[1:4].clone()

5 张量维度改变.view()

在PyTorch中,可以使用.view()方法来改变张量的维度。.view()方法接受一个参数,即新的维度大小的元组。通过改变维度,可以重新组织张量的数据,但要确保新的形状与原来的形状兼容(即原来的元素总数与新形状的元素总数相同)。
以下是使用.view()方法改变张量维度的示例:

import torch
# 创建一个三维张量
a = torch.tensor([[1, 2, 3], [4, 5, 6]])
# 改变张量的维度
b = a.view(3, 2)  # 将形状改变为(3, 2)
print(b)
# 输出:
# tensor([[1, 2],
#         [3, 4],
#         [5, 6]])
# 创建一个四维张量
c = torch.tensor([[[1, 2], [3, 4]],
                  [[5, 6], [7, 8]],
                  [[9, 10], [11, 12]]])
# 改变张量的维度
d = c.view(2, 3, 2)  # 将形状改变为(2, 3, 2)
print(d)
# 输出:
# tensor([[[ 1,  2],
#          [ 3,  4],
#          [ 5,  6]],
#
#         [[ 7,  8],
#          [ 9, 10],
#          [11, 12]]])
# 改变维度后的张量与原始张量共享内存
# 修改b或d的值将影响a或c的值,反之亦然

在这些示例中,我们使用.view()方法将张量的维度重新整形为指定的大小。需要注意的是,.view()方法返回的是原始张量的视图(view),即与原始张量共享内存。这意味着在视图上的操作会影响原始张量,反之亦然。如果需要创建原始张量的副本并改变维度,可以在视图调用之后使用.clone()方法。
另外,.view()方法还支持使用-1作为维度的占位符。通过将某个维度设置为-1,PyTorch会自动计算该维度的大小,以满足原始张量元素总数与新张量元素总数相同的要求。例如:

a = torch.tensor([1, 2, 3, 4, 5, 6])
b = a.view(2, -1)  # 自动计算第二个维度的大小
print(b)
# 输出:
# tensor([[1, 2, 3],
#         [4, 5, 6]])

在这个示例中,.view(2, -1)会将原始张量重塑为形状为(2,3)的张量。第二个维度的大小会自动计算为6/2=3。

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值