• 【PyTorch】PyTorch中张量(Tensor)统计操作


    PyTorch深度学习总结

    第五章 PyTorch中张量(Tensor)统计操作



    前言

    上文介绍了PyTorch中张量(Tensor)的计算操作,本文将介绍张量的统计操作。


    一、最值查找

    函数描述
    torch.max()找出张量中的最大值
    torch.argmax()输出最大值所在位置
    torch.min()找出张量中的最小值
    torch.argmin()输出最小值所在位置
    torch.sort()对一维张量或多维(每个维度单独)进行排序
    torch.topk(A, k)根据指定值k,计算出张量A取值为前k大的值,并显示所在位置
    torch.kthvalue(A, k)根据指定值k,计算出张量A取值为第k小的值,并显示所在位置

    创建张量:

    # 引入库
    import torch
    
    # 创建张量A
    A = torch.arange(2., 8.).reshape(2,3)
    print(A)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    输出结果为:tensor([[2, 3, 4], [5, 6, 7]])


    测试函数:

    print(A.max())
    print(A.argmax())
    print(A.min())
    print(A.argmin())
    
    • 1
    • 2
    • 3
    • 4

    输出结果为(含注释):
    tensor(7.)
    tensor(5) # 0-5的最后一位
    tensor(2.)
    tensor(0) # 0-5的第一位


    torch.sort()
    创建随机张量B:

    # 创建随机张量B
    B = torch.randperm(15).reshape(3, 5) # torch.randperm(n)可以生成有n个0-10之间整数组成的张量
    print(B)
    
    • 1
    • 2
    • 3

    输出结果为:
    tensor(
    [[13, 9, 1, 2, 0],
    [ 4, 14, 12, 3, 7],
    [ 5, 6, 8, 11, 10]])


    对张量B进行排序:

    # 升序输出
    print(B.sort())  # 分别输出排序后的值,以及该值在原索引中不同维度的位置(列数)
    
    • 1
    • 2

    输出结果为:
    torch.return_types.sort(
    values=tensor([[ 0, 1, 2, 9, 13],
    [ 3, 4, 7, 12, 14],
    [ 5, 6, 8, 10, 11]]),
    indices=tensor([[4, 2, 3, 1, 0],
    [3, 0, 4, 2, 1],
    [0, 1, 2, 4, 3]]))


    # 降序输出
    print(B.sort(descending=True))
    
    • 1
    • 2

    输出结果为:
    torch.return_types.sort(
    values=tensor([[13, 9, 2, 1, 0],
    [14, 12, 7, 4, 3],
    [11, 10, 8, 6, 5]]),
    indices=tensor([[0, 1, 3, 2, 4],
    [1, 2, 4, 0, 3],
    [3, 4, 2, 1, 0]]))


    测试函数torch.topk()

    # 选取每个维度最大和次大的值,及其位置
    print(B.topk(2))
    
    • 1
    • 2

    输出结果为:
    torch.return_types.topk(
    values=tensor([[13, 9],
    [14, 12],
    [11, 10]]),
    indices=tensor([[0, 1],
    [1, 2],
    [3, 4]]))


    # 选取2-dim维度前2大的值及其位置
    print(B)
    print(B.topk(2, dim=0))  # 每列最大的两个值
    
    • 1
    • 2
    • 3

    输出结果为(含注释):
    tensor([[13, 9, 1, 2, 0],
    [ 4, 14, 12, 3, 7],
    [ 5, 6, 8, 11, 10]])
    torch.return_types.topk(
    values=tensor([[13, 14, 12, 11, 10],
    [ 5, 9, 8, 3, 7]]),
    indices=tensor([[0, 1, 1, 2, 2],
    [2, 0, 2, 1, 1]])) # indices表示对应元素的行数


    # 选取2-dim最大和次大的值,及其位置
    print(B.topk(2, dim=1))  # 与默认情况相同默认情况
    
    • 1
    • 2

    输出结果为:
    torch.return_types.topk(
    values=tensor([[13, 9],
    [14, 12],
    [11, 10]]),
    indices=tensor([[0, 1],
    [1, 2],
    [3, 4]]))


    测试函数torch.kthvalue()

    # 选取每个维度第2小的值及其位置
    print(B)
    print(B.kthvalue(2))
    
    • 1
    • 2
    • 3

    输出结果为:
    tensor([[13, 9, 1, 2, 0],
    [ 4, 14, 12, 3, 7],
    [ 5, 6, 8, 11, 10]])
    torch.return_types.kthvalue(
    values=tensor([1, 4, 6]),
    indices=tensor([2, 0, 1]))


    二、特殊值查询

    函数描述
    torch.mean(A, dim=0)根据指定维度计算均值
    torch.sum(A, dim=0)根据指定维度求和
    torch.cumsum(A, dim=0)根据指定维度计算累加和
    torch.median(A, dim=0)根据指定维度计算中位数
    torch.cumprod(A, dim=0)根据指定维度计算乘积
    torch.std(A, dim=0)根据指定维度计算标准差

    测试函数(维度0):

    print(A)
    print(A.mean(dim=0))
    print(A.sum(dim=0))
    print(A.cumsum(dim=0))
    print(A.median(dim=0))
    print(A.cumprod(dim=0))
    print(A.std(dim=0))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    输出结果为(含注释):
    tensor([[2., 3., 4.],
    [5., 6., 7.]]) # 张量A
    tensor([3.5000, 4.5000, 5.5000]) # 每列均值
    tensor([ 7., 9., 11.]) # 每列求和
    tensor([[ 2., 3., 4.],
    [ 7., 9., 11.]]) # 每列累加求和
    torch.return_types.median(
    values=tensor([2., 3., 4.]),
    indices=tensor([0, 0, 0])) # 每列中位数及索引
    tensor([[ 2., 3., 4.],
    [10., 18., 28.]]) # 每列累乘
    tensor([2.1213, 2.1213, 2.1213]) # 每列标准差


    print(A)
    print(A.mean(dim=1))
    print(A.sum(dim=1))
    print(A.cumsum(dim=1))
    print(A.median(dim=1))
    print(A.cumprod(dim=1))
    print(A.std(dim=1))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    输出结果为(含注释):
    tensor([[2., 3., 4.],
    [5., 6., 7.]]) # 张量A
    tensor([3., 6.]) # 每行均值
    tensor([ 9., 18.]) # 每行求和
    tensor([[ 2., 5., 9.],
    [ 5., 11., 18.]]) # 按行逐个累加
    torch.return_types.median(
    values=tensor([3., 6.]),
    indices=tensor([1, 1])) # 每行中位数
    tensor([[ 2., 6., 24.],
    [ 5., 30., 210.]]) # 按行逐个累乘
    tensor([1., 1.]) # 每行标准差

  • 相关阅读:
    基于RBAC 的SAAS系统权限设计
    第1章 docker基础
    No authorization token was found
    【校招VIP】前端操作系统之进程与线程
    近日找实习总结
    docker-comose安装失败解决
    【性能测试】Jmeter常见的命令
    用Docker打包Python运行环境
    图像特征之SIFT
    企业宣传为何要重视领军人物包装?领军人物对企业营销的价值和作用分析
  • 原文地址:https://blog.csdn.net/goldfisheye/article/details/136115290