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

np.einsum('ij,kl->il')运算逻辑解析及与矩阵乘法的疑问

问题拆解与运算逻辑分析

1. 求和维度的明确

在np.einsum('ij,kl->il', A, B)中,被求和的是A的第二个维度j和B的第一个维度k。einsum的核心规则是:所有没出现在输出标签(这里是il)里的输入维度,都会被遍历后求和。这里输入维度是i,j(对应A的(4,2)形状)和k,l(对应B的(2,3)形状),输出只保留i和l,所以j和k这两个维度会被完全遍历并累加求和。

2. 直观理解方式

这个操作可以简化成:输出矩阵E的每个元素E[i,l],等于A第i行所有元素的和,乘以B第l列所有元素的和。

推导过程很直接:对于固定的i和l,E[i,l]的计算是对所有j(0到1)和k(0到1)的A[i,j] * B[k,l]求和,拆分后就是:

E[i,l] = (A[i,0] + A[i,1]) × (B[0,l] + B[1,l])

把双重求和转化成两个单求和的乘积,一下子就清晰了。

3. 示例数值拆解验证

用给定的矩阵A和B实际算几个值,验证逻辑:

  • A:np.array([[1,2],[3,4],[5,6],[7,8]])(4行2列)
  • B:np.array([[9,10,11],[12,13,14]])(2行3列)

计算E[0,0]

  • A第0行的和:1+2=3
  • B第0列的和:9+12=21
  • E[0,0] = 3×21=63
  • 对应einsum的展开计算:1×9 +1×12 +2×9 +2×12 =9+12+18+24=63,结果完全一致。

计算E[1,1]

  • A第1行的和:3+4=7
  • B第1列的和:10+13=23
  • E[1,1] =7×23=161
  • 展开计算:3×10 +3×13 +4×10 +4×13=30+39+40+52=161,没问题。

计算E[3,2]

  • A第3行的和:7+8=15
  • B第2列的和:11+14=25
  • E[3,2]=15×25=375
  • 展开计算:7×11 +7×14 +8×11 +8×14=77+98+88+112=375,完全匹配。

4. 和常规矩阵乘法的区别

常规矩阵乘法np.einsum('ij,jk->ik', A, B)是对共享的维度j=k求和(A的第j列和B的第j行对应相乘后累加),而当前操作是对两个独立的维度j和k分别求和后再相乘,只是刚好输出维度和矩阵乘法一样(都是4行3列),本质逻辑完全不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:50:56