You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用numpy.einsum实现未知数量操作数的矩阵-向量链式乘法?

高效实现任意数量矩阵-向量的链式乘法

当你需要处理任意数量N的矩阵与初始向量的链式乘法时,numpy.einsum确实会因为标签数量限制(仅支持52个大小写字母)和动态生成下标字符串的繁琐性而受限。这里有两种更高效且无限制的替代方案:

方案1:先合并矩阵再乘向量

利用矩阵乘法的结合律,先将所有矩阵通过numpy.linalg.multi_dot合并为一个单一矩阵,再与初始向量相乘。multi_dot会自动选择最优的乘法顺序,比手动循环连乘更高效。

代码示例:

import numpy as np

# 假设matrices是存储所有待乘矩阵的列表,v是初始向量
if not matrices:
    result = v.copy()
else:
    # 合并所有矩阵为一个大矩阵
    combined_mat = np.linalg.multi_dot(matrices)
    # 计算最终结果
    result = combined_mat @ v

方案2:迭代式矩阵-向量相乘

如果矩阵规模较大、合并矩阵会占用过多内存,可以选择迭代计算:每次用当前矩阵乘上一轮的向量结果,逐步得到最终输出。

代码示例:

import numpy as np

result = v.copy()
# 遍历所有矩阵,依次与当前向量相乘
for mat in matrices:
    result = mat @ result

这两种方案都不存在einsum的标签数量限制,且完全基于numpy的原生优化操作,性能表现更稳定。

内容的提问来源于stack exchange,提问作者SimoneGasperini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 01:13:20