码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • pytorch中gather函数详解【包你看懂,我敢说在CSDN上没人解释的比我清楚】


    在看centernet中遇到gather函数,看了好几个博客也都没咋看懂,直到看了这个视频链接,在此感谢这位哔站up主。

    直接先看代码:

    import torch
    a = torch.arange(15).view(3, 5)
    b = torch.zeros_like(a)
    b[1][2] = 1
    b[0][0] = 1
    print(a)
    print(b)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    输出:

    tensor([[ 0,  1,  2,  3,  4],
            [ 5,  6,  7,  8,  9],
            [10, 11, 12, 13, 14]])
    tensor([[1, 0, 0, 0, 0],
            [0, 0, 1, 0, 0],
            [0, 0, 0, 0, 0]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    代码:

    c = a.gather(0, b) # dim=0
    d = a.gather(1, b) # dim=1
    print(c)
    print(d)
    
    • 1
    • 2
    • 3
    • 4

    输出:

    tensor([[5, 1, 2, 3, 4],
            [0, 1, 7, 3, 4],
            [0, 1, 2, 3, 4]])
    tensor([[ 1,  0,  0,  0,  0],
            [ 5,  5,  6,  5,  5],
            [10, 10, 10, 10, 10]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    首先解释一下什么是dim=0和dim=1,其实0和1是索引矩阵b在被索引矩阵a索引的位置,例如dim=0,以3维为例,
    output [ i ] [ j ] [ k ] [i][j][k] [i][j][k]=input [ i n d e x [ i ] [ j ] [ k ] ]    [ j ] [ k ] [index[i][j][k]]\ \ [j][k] [index[i][j][k]]  [j][k]
    dim=1,
    output [ i ] [ j ] [ k ] [i][j][k] [i][j][k]=input [ i ]   [ i n d e x [ i ] [ j ] [ k ] ]   [ k ] [i]\ [index[i][j][k]]\ [k] [i] [index[i][j][k]] [k]

    上面的代码中,c、d为output,a为input,b为index,
    所以c = a.gather(0, b) # dim=0,
    c[0][0]=a[b[0][0]] [0]=a[1][0]=5
    c[0][1]=a[b[0][1]] [1]=a[0][1]=1
    c[0][2]=a[b[0][2]] [2]=a[0][2]=2
    。。。依此类推
    c = a.gather(0, b) # dim=1,
    c[0][0]=a[0][b[0][0]]=a[0][1]=1
    c[0][1]=a[0][b[0][1]]=a[0][0]=0
    c[0][2]=a[0][b[0][2]]=a[0][0]=0

    c[1][0]=a[1][b[1][0]]=a[1][0]=5
    c[1][1]=a[1][b[1][1]]=a[1][0]=5
    c[1][2]=a[1][b[1][2]]=a[1][1]=6
    。。。依此类推

  • 相关阅读:
    语音机器人空号识别介绍
    深度系统v15.4正式发布,惊艳眼球
    物联网通信-如何基于TCP/IP简要设计业务应用协议(c++案例)
    智慧油气田方案:视频+AI识别,助力油气田生产与管理智能化转型
    rtthread下基于spi device架构MCP25625驱动
    Mysql服务器数据还原/同步到本地数据库失败解决办法
    Spring Cloud框架学习-Spring Cloud Sleuth
    机器人制作开源方案 | 晾衣收纳一体机器人
    进程调度的基本过程——请各位不要当渣男~
    How to install oracle19c in Centos8
  • 原文地址:https://blog.csdn.net/qq_23022733/article/details/126072740
  • 最新文章
  • [实例] SPI接口的ADC芯片全通道纯硬件驱动——基于HAL库和TLA2518芯片
    龙芯2k0300 - 智能车走马观碑组目标检测算法
    深度学习进阶(二十)Transformer-XL
    10 个示例快速入门 Go-Spring|v1.3.0 正式发布
    PyTorch KernelAgent 源码解读 ---(1)--- 原理
    洛谷-P16434 [APIO 2026 中国赛区] 蛋糕 题解
    有关认知感受的论文(娱乐)
    Llamaindex框架
    本地大模型推理实战
    APEX实战第13篇:全套开发环境的本地配置与恢复实践
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号