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

如何使用einsum批量计算矩阵B中每个行向量的xAx^T?

用EinSum实现行向量二次型计算

我们需要对堆叠在矩阵B(维度(m,n))中的每个行向量x,计算二次型xAx^T(其中A是(n,n)矩阵),最终得到维度为(m,1)的结果向量。

实现代码

直接用EinSum可以一步完成计算,无需循环:

import torch
m = 30
n = 4
B = torch.randn(m, n)
A = torch.randn(n, n)

# EinSum实现,直接得到(m,1)结果
einsum_result = torch.einsum('bi,ij,bj->b1', B, A, B)

# 原循环方法用于验证
result = torch.zeros(m,1)
for i in range(m):
    x = B[i].unsqueeze(0)
    result[i] = torch.matmul(x, torch.matmul(A, x.T))

# 验证结果一致性
print(torch.allclose(einsum_result, result))  # 输出 True

表达式说明

EinSum的维度标记'bi,ij,bj->b1'对应逻辑:

  • bi:矩阵B的维度,b代表第b个行向量(共m个),i代表特征维度(共n个)
  • ij:矩阵A的维度,连接B的i维度和自身的j维度
  • bj:再次引用矩阵B,用j维度和A的j维度对应
  • ->b1:指定输出为(m,1)维度,直接匹配需求的结果形状

如果不需要直接输出(m,1),也可以写成'bi,ij,bj->b'得到(m,)的向量,再通过unsqueeze(1)转换维度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 09:12:22