当前位置: 首页 > article >正文

einsum(爱因斯坦求和)

在Python中,特别是使用NumPy或PyTorch等科学计算库时,爱因斯坦求和约定(Einstein summation convention)是一种强大的工具,它允许你以简洁的方式指定多维数组(张量)之间的操作,如求和、乘法和广播。虽然Python本身并不直接支持爱因斯坦求和约定的语法,但一些库(如NumPy的einsum函数和PyTorch的einsum操作)提供了对它的支持。

NumPy中的einsum

NumPy的einsum函数允许你指定数组操作的计算方式,通过一种紧凑的字符串表示法。这个字符串描述了输入数组的形状、操作的维度以及如何对它们进行求和或广播。

基本语法
numpy.einsum(subscripts, *operands, **kwargs)
  • subscripts:一个字符串,描述了操作。它指定了输入数组的每个维度以及如何在输出数组中组合它们。
  • operands:一个或多个数组,是操作的输入。
  • **kwargs:其他关键字参数,如out(指定输出数组),dtype(指定输出数组的数据类型),order(指定数组的内存布局)等。
示例
  1. 矩阵乘法
import numpy as np

a = np.random.rand(3, 4)
b = np.random.rand(4, 5)

# 使用einsum进行矩阵乘法
c = np.einsum('ij,jk->ik', a, b)

# 等同于使用numpy的dot函数
# c = np.dot(a, b)

在这个例子中,'ij,jk->ik'指定了操作:ija的维度,jkb的维度,输出c的维度是ik,其中j维度被求和(这是爱因斯坦求和约定的核心)。

  1. 计算内积
a = np.random.rand(3)
b = np.random.rand(3)

# 使用einsum计算内积
dot_product = np.einsum('i,i->', a, b)

# 等同于使用numpy的dot函数(对于一维数组)
# dot_product = np.dot(a, b)

在这个例子中,'i,i->'指定了操作:iab的公共维度,输出是一个标量(没有维度),因为所有维度都被求和了。

PyTorch中的einsum

PyTorch也提供了一个einsum操作,其语法和功能与NumPy的einsum非常相似。

示例
import torch

a = torch.randn(3, 4)
b = torch.randn(4, 5)

# 使用einsum进行矩阵乘法
c = torch.einsum('ij,jk->ik', [a, b])

# 等同于使用torch的matmul函数
# c = torch.matmul(a, b)

在这个PyTorch的例子中,einsum的调用方式与NumPy非常相似,但是注意输入数组是作为列表传递给einsum的。

总结

爱因斯坦求和约定是一种强大的工具,它允许你以一种非常紧凑和灵活的方式指定多维数组之间的操作。虽然Python本身不直接支持这种语法,但NumPy和PyTorch等库提供了对它的支持,使得你可以利用这种约定来编写更简洁、更高效的代码。


http://www.kler.cn/a/445910.html

相关文章:

  • Linux 使用的小细节
  • 《薄世宁医学通识50讲》以医学通识为主题,涵盖了医学的多个方面,包括医学哲学、疾病认知、治疗过程、医患关系、公共卫生等
  • rfid标签打印开发指导
  • 艾体宝案例丨CircleCI 助力 ANA Systems 打造高效 CI/CD 模型
  • ubuntu,自动休眠后,程序自动暂停。如何破?
  • CEF127 编译指南 MacOS 篇 - 编译 CEF(六)
  • 瑞吉外卖项目学习笔记(二)Swagger、logback、表单校验和参数打印功能的实现
  • 提炼关键词的力量:AI驱动下的SEO优化策略
  • RAGFlow(3):VScode端口转发在在本机浏览(比内网穿透好用)
  • R语言处理XML文件
  • C语言:以数据块的形式读写文件
  • Docker 清理命令
  • 使用C#调用SAP的WebService接口
  • 【工作记录】springboot应用中使用Jasypt 加密配置文件@20241216
  • 微信小程序:轻应用的未来与无限可能
  • Fortify 24.2.0版本最新版 win/mac/linux
  • 网络和IP地址计算器方案
  • JVM 详解
  • 大数据-252 离线数仓 - Airflow 任务调度 Crontab简介 任务集成部署 入门案例
  • 中间件 redis安装
  • 洛谷 B3644 【模板】拓扑排序 / 家谱树 C语言
  • git部分命令的使用
  • Hmsc包开展群落数据联合物种分布模型分析通用流程(Pipelines)
  • 如何快速构建Jmeter脚本
  • oracle AES CBC,128位密钥加解密方法
  • 【C++ DFS 图论】1519. 子树中标签相同的节点数|1808