pytorch学习笔记之pytorch基础一(基本数据类型、创建Tensor)

基本数据类型

数据类型

  • 在Python中,我们常用 int, float 等表示数据类型;在Pytorch中则统一为不同的 张量(tensor) 形式 。
  • 同时,在CPU和GPU中,表示的方式也有区别,在GPU中的类型需额外增加 .tensor (即使是同一个数据,放在不同的位置,其类型也是不同的)
    在这里插入图片描述

类型检验

  1. 可以采用 a.type() 的方式将数据类型打印出来
  2. 也可以采用 type(a) 的方式 ,但此方式只能显示张量的总类型,故不常用
  3. 在程序中往往采用 isinstance() 的方式判断是否为期望类型
    在这里插入图片描述

维度(dimension)

注:通过 .dim()len(a.shape) 可以直接获取维度数;通过*.nmel()** 可以获取数据大小*

0维

  • dimension为0 ,称之为标量,直接用 torch.tensor(a) ,(a为任意常数) 的方式表示 (一般用于表示loss的值)
  • 可以使用 .shape() 获取大小 ,可以得到 torch.size([ ]) 的输出,代表 dim 为0
    在这里插入图片描述

1维

  • dimension为1 ,称之为一维向量,使用torch.tensor(a,b) ,(a,b为任意常数) 来表示一个确定的一维向量 (a,b), 或torch.FloatTensor(a) ,(a为任意常数) 来表示一个随机生产的一维向量,a代表数据的个数 (一般用于表示bias、liner input的值)
    在这里插入图片描述

2维

  • dimension为2 ,称之为二维向量,使用torch.randn(a,b) ,(a,b为任意常数) 来随机创建一个a行b列的矩阵 (randn为随机正太分布) (常用于linerinput)
  • 使用 .shape 可以获得该值的行数和列数;使用 .shape[ 0 ] 可以获得行数; .shape[ 1 ] 获得列数
  • 使用 .size( 0 ) 可以获得行数;.size( 1 ) 可以获得列数(注意:这里的括号为圆括号,shape为方括号)
    在这里插入图片描述

3维

  • dimension为3 ,称之为三维向量,使用torch.rand(a,b,c) ,(a,b,c为任意常数) 来随机创建一个三维的矩阵 (rand为随机均匀分布)
  • 常用于RNN,用于NLP的文字处理,三维分别表示:单词数,句子数和特征
  • 直观上可与从最左边开始数,有几个方括号就是几维,其余内容基本同上

在这里插入图片描述

4维

  • dimension为4 ,称之为四维向量,使用torch.rand(b,c,h,w) ,(b,c,h,w为任意常数) 来随机创建一个四维的矩阵 (rand为随机均匀分布)
  • 常用于CNN,四维数据分别表示为:b->单次传入的图片数量(batch_size);c->通道数;h,w->图片的宽高

在这里插入图片描述

创建Tensor

np转换

  • 先通过 np. array() 等方式创建numpy数组;再通过 torch.from_numpy()数组转化为 tensor

torch.empty()

  • 可以通过 torch.empty() 创建一个未初始化的tensor,输入为大小shape

torch.tensor() / torch.Tensor()

  • 直接通过 torch.tensor()torch.Tensor() 创建 tensor数组
  • *注意: 小写的 .tensor() 内只能输入确定的值;而大写的 .Tensor() 则可以 输入大小shape 作为初始化,如, .Tensor(a,b) ;也可以 直接输入确定的值,如 .Tensor([a,b])
  • 一般来说,使用 .Tensor() 时输入 shape ;使用 .tensor() 时输入确定的值

torch.set_default_tensor_type()

  • 可以使用 torch.set_default_tensor_type() 指定默认的参数类型,如,下例,将默认参数类型改为 Double_Tensor
    在这里插入图片描述

torch.full( [a,b] ,c)

  • 使用 torch.full( [a,b] ,c) 将[a,b]的值全部赋值为c,[a,b] 可以为空

torch.randn() / torch.normal()

  • 使用 torch.randn() ,输入为shape ,创建一个已知shape的随机数列
  • 使用 torch.normal() ,随机创建均匀分布数列,例子如下
    在这里插入图片描述

arange / range

  • 在torch中一般用arange创建一个左闭右开的联系数组(注意,一般不用range)举例如下(第三个参数为步长):
    在这里插入图片描述

torch.linspace() /torch.logspace()

  • torch.linspace() 创建一个等分的等差数列 ,注意这里区别于arangetorch.linspace 区间是左闭右闭的
  • torch.logspace() 创建规则与 torch.linspace() 类似,相当于对 torch.linspace() 的每个值多一个10的底,每个元素都是十的几次方
    在这里插入图片描述

torch.one/zero/eye

  • torch.one 创建全1矩阵
  • torch.zero 创建全0矩阵
  • torch.eye(a) ,创建一个对角线为1,其余元素为0的对称阵(a阶单位阵)

torch.randperm

  • torch.randperm 生成一个左闭右开的随机索引
    在这里插入图片描述
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Python的ctypes库将ctypes结构体转换为tensor,具体的操作步骤是:1. 读取ctypes结构体;2. 使用ctypes中的from_buffer()函数将ctypes结构体转换为Numpy数组;3. 使用TensorFlow的tf.convert_to_tensor()函数将Numpy数组转换为Tensor。 ### 回答2: 要将ctypes结构体转为tensor,首先需要将ctypes结构体中的数据提取出来,然后将提取出的数据转换为Python列表或NumPy数组格式,最后再将其转换为PyTorchtensor对象。 以下是一种将ctypes结构体转为tensor的示例方法: ```python import ctypes import torch import numpy as np # 定义ctypes结构体 class MyStruct(ctypes.Structure): _fields_ = [ ('a', ctypes.c_int), ('b', ctypes.c_float), ('c', ctypes.c_double) ] # 创建ctypes结构体对象 my_struct = MyStruct() # 设置ctypes结构体中的数据 my_struct.a = 10 my_struct.b = 3.14 my_struct.c = 2.718 # 提取ctypes结构体中的数据 data = [my_struct.a, my_struct.b, my_struct.c] # 将数据转换为NumPy数组格式 numpy_array = np.array(data) # 将NumPy数组转换为tensor对象 tensor = torch.from_numpy(numpy_array) # 打印转换后的tensor print(tensor) ``` 运行以上代码后,将输出转换后的tensor对象: ``` tensor([10.0000, 3.1400, 2.7180], dtype=torch.float64) ``` 这样,我们就成功地将ctypes结构体转为了PyTorchtensor对象。 ### 回答3: 要将ctypes结构体转为tensor,我们需要先了解ctypes和tensor的基本概念。 ctypes是一个Python库,它允许Python与C代码进行交互。它提供了许多函数和类,用于访问和操作C的数据类型和函数。 而tensor一个多维数组,被广泛用于深度学习框架中。在Python中,tensor通常由科学计算库如NumPy或PyTorch提供。 要将ctypes结构体转为tensor,我们可以通过以下步骤来实现: 1. 导入所需的库: ```python import ctypes import numpy as np ``` 2. 定义ctypes结构体。假设我们有一个包含x和y坐标的点结构体: ```python class Point(ctypes.Structure): _fields_ = [("x", ctypes.c_float), ("y", ctypes.c_float)] ``` 3. 创建一个ctypes结构体实例,并初始化数据: ```python point = Point() point.x = 1.0 point.y = 2.0 ``` 4. 使用`ctypes.pointer()`函数获取结构体实例的指针: ```python point_ptr = ctypes.pointer(point) ``` 5. 使用`np.frombuffer()`函数将结构体指针转换为NumPy数组: ```python array = np.frombuffer(ctypes.addressof(point_ptr.contents), dtype=np.float32) ``` 6. 将数组转换为tensor: ```python tensor = torch.from_numpy(array) ``` 通过以上步骤,我们就可以将ctypes结构体转为tensor了。需要注意的是,这里的示例使用了NumPy和PyTorch库,实际上你可以根据自己的需求选择其他科学计算库来执行相似的操作。另外,转换过程中可能还需要进行类型转换、内存对齐等操作,具体根据ctypes结构体和目标tensor的数据类型来确定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值