• pytorch.数据结构Tensor


    tensor是一种和numpy很像的数据结构,都是想要操作向量,矩阵,但是tensor是pytorch特有的,而numpy现在是事实上的python矩阵库。tensor被翻译为张量,他最大的特点就是可以被运行在GPU上,而NumPy的NDArray只能运行在CPU上,GPU在加速神经网络运算时很有用,所以,无论是tensorflow还是pytorch都有这个东西。

    创建Tensor

    直接由数组创建

    import torch
    import numpy as np
    
    data = [[1, 2], [3, 4]]
    x_data = torch.tensor(data)
    print(x_data)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    由numpy转换

    np_array = np.array(data)
    x_np = torch.from_numpy(np_array)
    print(x_np)
    
    • 1
    • 2
    • 3

    我们也可以直接创建特殊的tensor矩阵

    size = (2,3)
    
    torch.empty(size)
    # 返回形状为size的空tensor
    
    torch.zeros(size)
    # 全部是0的tensor
    
    torch.zeros_like(input)
    # 返回跟input的tensor一个size的全零tensor
    
    torch.ones(size)
    # 全部是1的tensor
    
    torch.ones_like(input)
    # 返回跟input的tensor一个size的全一tensor
    
    torch.arange(start=0, end, step=1)
    # 返回一个从start到end的序列,可以只输入一个end参数,就跟python的range()一样了。实际上
    # PyTorch也有range(),但是这个要被废掉了,替换成arange了
    
    torch.full(size, fill_value)
    # 这个有时候比较方便,把fill_value这个数字变成size形状的张量
    
    torch.randn(size) 
    # 随机一个生成一个tensor
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    2.Tensor的属性

    # tensor的属性
    tensor = torch.rand(3, 4)
    # tensor的大小
    print(f"Shape of tensor: {tensor.shape}")
    # tensor的数据类型
    print(f"Datatype of tensor: {tensor.dtype}")
    # tensor存储的地方 CPU or GPU
    print(f"Device tensor is stored on: {tensor.device}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.CPU和GPU数据的转换

    # 将tensor转移到GPU
    if torch.cuda.is_available():
        tensor = tensor.to("cuda")
        print("tensor is moved to GPU")
    
    • 1
    • 2
    • 3
    • 4

    4.Tensor的矩阵操作

    tensor的切片,和numpy或者list的操作很像

    tensor = torch.ones(4, 4)
    print(f"First row: {tensor[0]}")
    print(f"First column: {tensor[:, 0]}")
    print(f"Last column: {tensor[:, -1]}")
    tensor[:, 1] = 0
    print(tensor)
    
    t1 = torch.cat([tensor, tensor, tensor], dim=1)
    print(t1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    矩阵的乘法或者除法运算

    # 这个就是数学意义上的乘法
    y1 = tensor @ tensor.T
    y2 = tensor.matmul(tensor.T)
    y3 = torch.rand_like(y1)
    torch.matmul(tensor, tensor.T, out=y3)
    
    # 下面乘法相当于是点乘,也就是每个对应位置元素元素乘以每个元素
    z1 = tensor * tensor
    z2 = tensor.mul(tensor)
    z3 = torch.rand_like(tensor)
    torch.mul(tensor, tensor, out=z3)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    求和运算

    agg = tensor.sum()
    agg_item = agg.item()
    print(agg_item, type(agg_item))
    
    • 1
    • 2
    • 3

    加法运算

    # 所有元素全部加一
    tensor.add_(1)
    print(tensor)
    
    # 当然也可以直接相加
    a = torch.rand((2,3))
    b = torch.rand((2,3))
    c = a + b
    print(c)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    Hive综合应用案例——用户学历查询
    selenium爬取图片
    uniapp的扩展组件uni-popup 弹出层自动打开
    《七月集训》(第一天)——数组
    C++map函数的用法
    一级必杀,防不胜防的漏洞,WEB安全基础入门—文件上传漏洞
    【云原生】Kubernetes核心技术(上)
    【JavaScript进阶】 一步一步带你手写 Promise,理解核心的异步链式调用及JS执行机制原理
    二进制转换16进制 快速心算
    含分布式电源的配电网可靠性评估(matlab代码)
  • 原文地址:https://blog.csdn.net/weixin_43903639/article/details/126907940