首页 > 其他分享 >einsum 函数

einsum 函数

时间:2024-08-08 22:54:46浏览次数:16  
标签:函数 einsum 矩阵 张量 索引 ij 维度

einsum 是 Einstein summation 的缩写,即 爱因斯坦求和约定einsum 函数源自 NumPy,后来在 PyTorch 等其他科学计算库中也得到了实现。它是一种强大而灵活的函数,可以用来处理各种张量运算,如矩阵乘法、转置、批量点积、内积、外积等。

爱因斯坦求和约定 (Einstein Summation Convention)

爱因斯坦求和约定是一种简洁的记号,用来表示张量运算中的求和操作。其核心思想是:如果在表达式中某个索引变量出现在多项式的两侧(即两个张量中),则默认对该索引进行求和,而不需要明确地写出求和符号。

einsum 的作用

einsum 函数允许用户通过指定输入张量的索引和输出张量的索引来定义各种张量运算。它不仅使表达式更加简洁和直观,还避免了对张量进行显式的维度操作(如转置、reshape 等),从而提高代码的可读性和效率。

如何使用 einsum

假设我们有两个矩阵 ( A ) 和 ( B ),它们的形状分别是 (i, j)(j, k),常规的矩阵乘法可以表示为:

[ C_{ik} = \sum_j A_{ij} \times B_{jk} ]

einsum 中,这可以写作:

C = torch.einsum('ij,jk->ik', A, B)

这里的 'ij,jk->ik' 就是索引迷你语言,解释如下:

  • 'ij' 是第一个矩阵 A 的索引,表示 A 的第一个维度用 i 表示,第二个维度用 j 表示。
  • 'jk' 是第二个矩阵 B 的索引,表示 B 的第一个维度用 j 表示,第二个维度用 k 表示。
  • ->ik 指定输出矩阵 C 的索引结构,即结果 C 的第一个维度是 i,第二个维度是 k

einsum 的优点

  • 灵活性:可以表示从简单的标量积到复杂的张量操作的一切运算。
  • 简洁性:消除显式的循环和冗余操作,使代码更加简洁易读。
  • 效率:通过在底层进行优化,einsum 能够在不影响性能的前提下执行复杂的张量操作。

例子

  • 矩阵乘法

    C = torch.einsum('ij,jk->ik', A, B)
    
  • 内积(点积):

    dot_product = torch.einsum('i,i->', x, y)
    
  • 外积

    outer_product = torch.einsum('i,j->ij', x, y)
    
  • 批量矩阵乘法

    batch_matrix_mult = torch.einsum('bij,bjk->bik', batch_A, batch_B)
    

在复杂的张量操作中,einsum 可以简化表达并提升代码的可读性和效率。

标签:函数,einsum,矩阵,张量,索引,ij,维度
From: https://www.cnblogs.com/litifeng/p/18349910

相关文章

  • 函数式编程-Stream流
    一、函数式编程-Stream流1、概述1.1为什么学?能够看懂公司里的代码大数量下处理集合效率高代码可读性高消灭嵌套地狱普通写法与函数式编程写法对比:普通写法//查询未成年作家的评分在70以上的书籍由于洋流影响所以作家和书籍可能出现重复,需要进行去重List<B......
  • C语言学习笔记 Day8(函数)
    Day8 内容梳理:目录Chapter6 函数6.0概述6.1 定义函数6.2 调用函数(1)实参&形参(2)调用无参函数(3)调用有参函数6.3 声明函数6.4 终止函数(exit&return)6.5多文件编程(1)设置主文件(2)创建头文件(3)导入头文件Chapter6 函数6.0概述函数的分类(2种):   ......
  • 教你领悟函数递归的本质
    一、何为递归①在C语言中,递归就是函数自己调用自己。递是指递推,归是指回归。②递归的思想:将复杂的问题简单化。③递推的两个必要条件。a:递归存在限制条件,当满足限制条件时,递归便不再继续b:每一次递归都要越来越接近限制条件/*用递归的方式求n!(n>=0)*/intFact(i......
  • FreeRTOS启动任务调度器函数解释
    目录vTaskStartScheduler()函数xPortStartScheduler()函数prvStartFirstTask()函数vPortSVCHandler()函数FreeRTOS的任务开始运行的前提是调用了启动调度器函数vTaskStartScheduler(),只有调用了该函数任务才会被调度并运行。下面以FreeRTOSv9.0.0版本的源码进行分析FreeRT......
  • C语言--函数
    函数的概述:函数:实现一定功能的,独立的代码模块。函数一定是先定义,后使用使用函数的优势:·我们可以通过函数提供功能给别人使用,也可以使用别人提供的函数,减少代码量               ·借助函数可以减少重复的代码               ·实现结构化(......
  • 轮换挑选图片,补充 es6的对象写法,uniapp使用,class和style,条件渲染,列表渲染,input
    Ⅰ轮换挑选图片【一】方式一<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><scriptsrc="./js2/vue.js"></script></head><body>......
  • 目录函数以及链接文件
    一、stat补充1、getpwuid()structpasswd*getpwuid(uid_tuid);功能:根据用户id到/etc/passwd文件下解析获得结构体信息参数:uid:用户id返回值:成功返回id对应用户的信息失败返回NULL2、getgrgid()structgroup*getgrgid(gid_tgid);拿到组的结构体功能:根据gid......
  • 函数不声明也可调用
    目录一、编译试试二、说明原由编译器隐式声明三、总结四、源码一、编译试试1、main.c2、add.c3、编译执行二、说明原由编译器隐式声明gcc编译器在编译源文件时,遇到未声明的函数调用时,会根据函数调用时传入的参数类型隐式的为此源文件生成一个函数声明:函数参数......
  • FFmpeg源码:av_realloc、av_reallocp、size_mult、av_realloc_f函数分析
    =================================================================FFmpeg内存管理相关的源码分析:FFmpeg中内存分配和释放相关的源码:av_malloc函数、av_mallocz函数、av_free函数和av_freep函数分析FFmpeg源码:av_realloc、av_reallocp、size_mult、av_realloc_f函数分析FF......
  • Pandas高级操作:多级索引、窗口函数、数据透视表等
            在数据处理和分析中,pandas库提供了强大的功能,支持从简单到复杂的数据操作。本文将介绍一些pandas的高级操作,包括多级索引(MultiIndex)、窗口函数(WindowFunctions)、数据透视表与复杂聚合、数据合并与连接、高级数据变换以及时间序列数据的高级处理。1.多级索......