首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

盘一盘 Python 特别篇 23 - 爱因斯坦求和 einsum

0 引言 最近我以电子版形式出了第二本书《Python 从入门到入迷》,然后定期更新书中内容,最先想到便是 einsum。...矩阵相乘通用形式如下,用字母代替数字得到 c21 = a21*b11 + a22*b21 + a23*b31。...当你学习一个新东西时,最好方法是从最基础部分开始,对于 einsum 这样基于数组运算函数,我们就依次从 0 维 (标量),1 维 (向量),2 维 (矩阵) 到高维 (张量) 数组一步步来探索。...首先 einsum 一招鲜吃遍天,可以满足数组所有类型运算,比如转置、内积、外积、对角线、迹、轴上求和,所有元素求和等。除此之外还有以下优点。...如果待处理张量不止三维,我们还可以“偷懒”地将多个彼此相连维度格式字符串用省略号 (...) 代替,以表示剩下所有维度。 einsum("ijk->jk", arr3) einsum("i...

1.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

基于numpy.einsum张量网络计算

通过观察这些示例中一阶和二阶张量我们可以得到一个规律:能够用形如var[i]形式读取和遍历var中标量元素就可以称之为一阶张量,能够用形如var[i][j]形式读取和遍历var中标量元素可以称之为二阶张量...在使用张量形式来表示单个矩阵同时,我们需要考虑如果有多个矩阵乘法运算,我们该如何表示?...我们先以两种形式python矩阵运算来说明张量计算表示方法: import numpy as np M = np.random.rand(2, 2) v = np.random.rand(2) w...times2} ,由于这里多维张量运算已经不能使用普通numpy.dot来处理,因此我们还是适用了专业张量计算函数numpy.einsum来进行处理,计算结果如下: A: [[[[0.85939221...,如何降低其复杂性scaling。

1.7K60

一文读懂Python实现张量运算

除此之外张量运算知识也用在Machine Learning以及一些特定量化计算方法上。张量运算逐渐成为了必备知识。...函数叫einsum,Ckl=Aijk×BijklCkl=Aijk×Bijkl 这种Einstein notation 可以通过如下方法实现: 只提取下标,kl=ijk,ijkl 写成字符串,等号变成 →...,计算结果数组下标放在右侧,'ijk , ijkl → kl' 写到einsum函数中,被乘函数依序排开。...上述求和,通过如下代码实现, A = np.random.rand(3,2,5) B = np.random.rand(3,2,5,6) C = np.einsum('ijk , ijkl -> kl'...写入函数:2*np.einsum('kl,ijkl → ij',D,I) 通常einsum函数是经过不断优化完善运算速度快,避免了我们写低效循环嵌套,并且使代码整洁,对于算法检验,非常合适。

3.9K40

einsum is all you needed

C_{ij} = A_{ik} B_{kj} 这个公式表达含义如下: C这个张量i行第j列由 A 这个张量i行第k列和 B 这个张量第k行第j列相乘,这样得到是一个三维张量 D , 其元素为...公式展现形式中除了省去了求和符号,还省去了乘法符号(代数通识)。 借鉴爱因斯坦求和约定表达张量运算清爽整洁,numpy、tensorflow和 torch等库中都引入了 einsum这个函数。...上述矩阵乘法可以被einsum这个函数表述成 C = torch.einsum("ik,kj->ij",A,B) 这个函数规则原理非常简洁,3句话说明白。 1,用元素计算公式来表达张量运算。...二,einsum基础范例 einsum这个函数精髓实际上是第一条: 用元素计算公式来表达张量运算。 而绝大部分张量运算都可以用元素计算公式很方便地来表达,这也是它为什么会那么神通广大。...来实现更常见scaled-dot-product 形式 Attention.

1.9K40

可以用爱因斯坦求和替代那些矩阵运算

克罗内克积 克罗内克积,又叫张量积,比如两个矢量或者矩阵之间没有耦合关系,那么可以用一个克罗内克积来总体表示这两个矢量或者矩阵组成矢量或者矩阵,该运算被定义为: x\otimes y^{T}=\left...代码实现如下所示: In [46]: np.allclose(np.diag(P), np.einsum('ii->i', P)) Out[46]: True 求矩阵迹 矩阵迹(Trace),就是对所有的对角元进行求和...(P, P, P, x)), np.einsum('ij,jk,kl,l->i', P, P, P, x)) Out[39]: True 在这种多重运算过程中,可以使用einsum_path去找到一条更好归并路径...而如果只是普通点乘求和之类运算,其实并不是Einsum主要功能。但是这些功能也可以用爱因斯坦求和形式来实现,也说明了这个约定先进性。...当然,也有众多矩阵运算功能是无法直接通过爱因斯坦求和算子来实现,比如矩阵求逆、求本征值、矩阵扩维、矩阵重构还有向量叉乘等等。只有在合适地方使用Einsum,才能体现它真正价值。

1.3K30

量子计算(九):复合系统与联合测量

首先,解决这些问题,需要认识一个新运算-张量积(tensor products)。一、张量积张量积是两个向量空间形成一个更大向量空间运算。...下面给出线性算子张量积矩阵表示运算规则-克罗内科积(Kronecker produet)。设A是m×n矩阵,B是p×q矩阵。...AB矩阵形式定义为这里AB是一个mp×mq矩阵,表示矩阵Ai行,第j列元素与矩阵B相乘。例如,Pauli矩阵和做张量积生成矩阵为举个反例就可以验证张量积并不满足交换律 。...可以看出两个向量做张量积如何表示呢?其实在给定基下,向量坐标表示也可以看作一个特殊矩阵。例如:向量在标准正交基{ |0〉, |1〉}下矩阵表示分别为和。... 变为本质上复合系统中量子态演化也是矩阵乘法,与单个子系统相比,只不过是多了张量积运算

63132

能「看到」张量运算:​因子图可视化

爱因斯坦求和符号 爱因斯坦符号存在多种形式,尤其是在物理学领域,但我们要介绍那种非常简单,没有任何物理学背景也能轻松掌握。 在矩阵乘法定义中, ? 求和符号实际上是多余。...这篇文章更详细地介绍了 einsum,并给出了一些很好示例:http://ajcr.net/Basic-guide-to-einsum/ 因子图 带有多个不同大小张量和-积表达式也被称为张量网络。...在上面的例子中,A_{ijk} 表示 A 连接着 i、j、k 边厚度对应于因子中轴(即数组分量长度)大小 这使得图成为了方框和圆圈之间二部图(bipartite graph) 仅出现在等式右侧索引...(i 和 j)会被隐式地求和。...作为一个有趣练习,你可以试试解读矩阵链乘法(matrix chain multiplication)过程,并使用因子图理解寻找一个链矩阵积总计算成本是如何受乘法顺序影响

1.2K40

NumPy学习笔记

是Python一个扩展程序库,支持多维度数组与矩阵计算,并且对数组运算提供了大量数学函数库; 今天,咱们就通过实战来了解NumPy最常用一些功能; 版本 操作系统:macOS Big Sur (11.6...,结果是数组中每个元素相加: 还可以做平方运算: dot方法是点乘,既a行与b列,每个元素相乘后再相加,得到值就是新矩阵一个元素: 除了用数组dot做点乘,还可以将两个矩阵对象直接相乘...,结果与dot结果一致: 另外还要有逆矩阵、转置矩阵、矩阵转数组成员变量需要注意: 爱因斯坦求和约定 这里不细说爱因斯坦求和约定本身,只聊聊NumPy对该约定支持,主要是einsum方法使用...: 如下图,表达式i->,箭头左侧只有一个字母,表示输入是一维,箭头右侧空空如也,表示降到0维,也就是求和: 三维矩阵降为二维矩阵: 矩阵转置: 还可以输入两个矩阵,做矩阵相乘,注意ij...和jk相乘后,变为ik,j维度消失了: 上图ij,jk->ik改成ij,jk->,既结果是零维,矩阵相乘就变成了内积计算: 关于轴 约减,即减少元素数量,以sum方法为例,例如一个2行2列二维数组

1.6K10

哈希算法、爱因斯坦求和约定,这是2020年注意力机制

本文从原 Multi-head Attention 出发,探索 Reformer 如何用哈希算法大量降低显存需求,探索 Talking-Head 如何强化全注意力机制表征能力。...这里举个栗子,两个矩阵乘法运算使用 einsum 表示法可写为: Y[a, c] = einsum(X[a, b], W[b, c]) 于是,前面介绍多头注意力机制使用 einsum 表示法可改写为如下形式...同时,einsum 表示法还支持大于两个矩阵作为输入运算。于是,以上伪代码可进一步精简为如下极简模式: ?...其对应伪代码表示如下,注释中标出了每个 einsum 运算所对应计算量。 ?...最后,多头注意力机制与交谈注意力机制都可看作一种「通用双线性多头注意力机制」(GBMA, i.e. general bilinear multihead attention)特殊形式

74820

如何将MasterCAM走刀图导出为CAD?

如在控制系统为FANUC18M机床上执行G02/G03圆弧指令,在G17平面上输出I、J圆弧指令,机床运行时却将一小段圆弧误走成中心角接近360度大圆弧,如下图所示。...那么,我们该如何处理这个问题呢?...1、首先,如何输出IJK格式 将控制定义中“圆心格式”修改为“开始至中心”; 2、输出R格式 将控制定义中“圆心格式”修改为“半径”,选择打断为四等分; 3、对于整圆输出,要用I和J方式编程,因R方式编程不支持全圆...: 4、圆心形式为R,一般可以将后处理中打断形式改为“打断圆弧为四等份”;如果打断形式还是打断圆弧为180度时,圆心形式改为起点相对于中心(即IJK形式)生成程序后误差也较小; 5、2D情况下一般选用...IJK形式较好。

1.9K20

张量与张量网络背景和意义-基础知识

通过观察这些示例中一阶和二阶张量我们可以得到一个规律:能够用形如var[i]形式读取和遍历var中标量元素就可以称之为一阶张量,能够用形如var[i][j]形式读取和遍历var中标量元素可以称之为二阶张量...在使用张量形式来表示单个矩阵同时,我们需要考虑如果有多个矩阵乘法运算,我们该如何表示?...我们先以两种形式python矩阵运算来说明张量计算表示方法: 1 2 3 4 5 6 7 import numpy as np M = np.random.rand(2, 2) v = np.random.rand...(1, 2, 2, 2) B = np.random.rand(2, 2, 2) C = np.einsum('ijkl,klm->ijm', A, B) print ('A:', A) print (...numpy.dot来处理,因此我们还是适用了专业张量计算函数numpy.einsum来进行处理,计算结果如下: 1 2 3 4 5 6 7 8 9 10 11 12 A: [[[[0.85939221

1.6K10

为科学计算而生Julia——基于Manjaro Linux安装与入门

Julia优势就在于可以达到接近于C语言性能,同时又能像python一样易于编写,兼顾了性能与开发周期,对科学计算非常友好。...Julia 与传统动态语言最重要区别是: 核心语言很小:标准库是用 Julia 自身写,包括整数运算这样基础运算 丰富基础类型:既可用于定义和描述对象,也可用于做可选类型标注 通过多重派发,可以根据类型不同...在 Julia 中运算符只是函数一个特殊标记——例如,为用户定义新类型添加加法运算,你只要为 + 函数定义一个新方法就可以了。 已有的代码就可以无缝接入这个新类型。...除此之外,Julia 还拥有以下优势: 采用 MIT 许可证:免费又开源 用户自定义类型速度与兼容性和内建类型一样好 无需特意编写向量化代码:非向量化代码就很快 为并行计算和分布式计算设计 轻量级...跟pythonpy文件类似的,julia可以将代码写入一个jl文件,再通过julia module.jl这样形式来调用: [dechin-root julia]# echo 'println("Hello

2.1K30

代数运算对应于认知运算,广义全息缩减表示 GFHRR

代数运算对应于认知运算。例如,捆绑操作对应于记忆,绑定操作对应于关联。...通过这种方式,HDC 可以充当一个接口,可以像符号方法一样明确指定结构,同时保持连接主义方法(尤其是深度学习)方法灵活性和功能。 HDC 在高维向量(称为超向量)上形成代数,其运算与认知运算相对应。...通常,生成基超向量时,它们相对于相似性函数是准正交。HDC 中三个主要操作,捆绑、绑定和排列,可以通过它们如何影响超向量相似性来表征。...2.2傅里叶全息简化表示 3GHRR概述 4GHRR实施 我们在第 3 节中描述是 GHRR 一般特征。指定实现需要指定 (1) 酉矩阵分量形式;以及相关 (2) 如何对它们进行采样。...从神经角度来看,我们可以将两个向量之间张量积解释为表示维度之间所有可能成对连接;即它们是完全连接。 相比之下,张量积对角线投影代表稀疏连接,只有向量对应维度是连接

5910
领券