numpy 如何用 einsum 实现高效的矩阵运算(爱因斯坦求和)
发布时间 - 2026-01-24 00:00:00 点击率:次einsum字符串需确保输入维度标签与输出标签严格匹配,字母顺序须与张量ndim一致,重复字母表求和或对角线,跨输入重复触发求和,空输出表示标量,省略号要求前缀维度对齐。
einsum 字符串怎么写才不报错
核心是让输入张量的维度标签和输出标签严格匹配,einsum 不会自动广播或对齐轴,写错一个字母就直接抛 ValueError: operands could not be broadcast together 或 IndexError。
- 每个输入张量用一串字母(如
"ij"、"jk")表示其形状,字母顺序必须和ndim一致 - 输出标签必须是所有输入中出现过的字母子集;没出现在输出里的字母,就代表要沿该轴求和
- 重复字母只在同一个输入中允许(如
"ii"表示对角线),跨输入重复则触发求和(如"ij,jk"中的j) - 空输出(如
"ii->")表示标量结果,不能漏掉箭头后的空字符串
替代 dot / matmul 的常见写法
多数矩阵乘、转置、迹运算都能用 einsum 更清晰地表达,且避免临时数组分配。
- 矩阵乘
A @ B→np.einsum("ij,jk->ik", A, B)(比dot更显式控制哪维参与计算) - 批量矩阵乘
B @ C,其中B.shape = (b, i, j),C.shape = (b, j, k)→np.einsum("bij,bjk->bik", B, C) - 提取对角线
np.diag(A)→np.einsum("ii->i", A);求迹 →np.einsum("ii->", A) - 外积
np.outer(u, v)→np.einsum("i,j->ij", u, v)
为什么有时比内置函数还慢
einsum 默认走通用路径,对简单操作(如二维矩阵乘)不如高度优化的 BLAS 后端快;是否加速取决于操作复杂度和数据规模。
- 小矩阵(
):通常matmul或dot更快,einsum有解析字符串开销 - 高维或带求和+广播混合的操作(如
"ab,cd,be->acde"):einsum可能显著胜出,因避免多个中间数组 - 加
optimize=True(如np.einsum("...,...->...", A, B, optimize=True))可启用路径优化,对三阶及以上张量尤其重要 - 注意:
optimize="greedy"或"optimal"会增加预处理时间,仅当反复调用同结构时值得开启
容易被忽略的内存与 dtype 陷阱
einsum 默认按输入中最高精度 dtype 输出,但不会自动提升整数精度;同时,它不共享内存,结果总是新分配数组。

- 两个
int32矩阵相乘,结果仍是int32,可能溢出;需显式转成float64或用dtype=np.float64参数指定 - 传入视图(如切片)时,输出一定是副本,无法通过
out=参数复用内存(einsum不支持out参数) - 含省略号
...时(如"...ij,...jk->...ik"),要确保前缀维度完全对齐,否则运行时报错而非静默截断
einsum 版本验证逻辑,再测性能;别为了“看起来高级”硬套,尤其是二维场景下 @ 还是最稳的。
# 后端
# 为什么
# numpy
# 字符串
# 切片
# 尤其是
# 多个
# 出现在
# 仍是
# 更快
# 不支持
# 只在
# 报错
# 而非
# 它不
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现一对一模型关联?(Eloquent示例)
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
如何自定义建站之星模板颜色并下载新样式?
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
如何在香港免费服务器上快速搭建网站?
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
如何在万网自助建站中设置域名及备案?
如何彻底卸载建站之星软件?
Laravel如何优化应用性能?(缓存和优化命令)
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
如何在 React 中条件性地遍历数组并渲染元素
Laravel如何升级到最新版本?(升级指南和步骤)
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
WordPress 子目录安装中正确处理脚本路径的完整指南
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
如何快速查询网站的真实建站时间?
网站制作软件有哪些,制图软件有哪些?
如何在阿里云高效完成企业建站全流程?
教学论文网站制作软件有哪些,写论文用什么软件
?
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
简历在线制作网站免费版,如何创建个人简历?
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
Android 常见的图片加载框架详细介绍
linux写shell需要注意的问题(必看)
如何快速搭建FTP站点实现文件共享?
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
如何在建站宝盒中设置产品搜索功能?
香港网站服务器数量如何影响SEO优化效果?
高防服务器如何保障网站安全无虞?
微信小程序 canvas开发实例及注意事项
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
Java类加载基本过程详细介绍
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
怎么用AI帮你为初创公司进行市场定位分析?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
linux top下的 minerd 木马清除方法
Android Socket接口实现即时通讯实例代码
如何用VPS主机快速搭建个人网站?
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
Laravel怎么调用外部API_Laravel Http Client客户端使用
实现点击下箭头变上箭头来回切换的两种方法【推荐】
C#如何调用原生C++ COM对象详解
青岛网站建设如何选择本地服务器?
上一篇:notepad怎么设置中文字体
下一篇:notepad怎么替换成换行
上一篇:notepad怎么设置中文字体
下一篇:notepad怎么替换成换行

