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

PyTorch中如何对(n1,N)与(n2,N)的Tensor做广播得到(n1,n2)结果

PyTorch 实现指定广播运算方案

你需要实现的是两组行向量的两两点积运算,最终输出的(n1,n2)张量中,第[i][j]位元素等于x1的第i行与x2的第j行逐元素相乘后求和的结果。

原代码错误原因

你原有代码中对x2的维度调整方向错误,reshape后的x2形状为(n2, N, 1),和形状为(n1, N)的x1广播时维度无法对齐到两两行配对的逻辑,因此得到的结果不符合预期。

推荐实现方案

方案1:矩阵乘法实现(性能最优)

矩阵乘法的运算逻辑完全匹配需求,仅需对第二个张量做转置后相乘即可:

import torch
# x1形状为(n1, N), x2形状为(n2, N)
result = torch.matmul(x1, x2.T)
# 也可以用@运算符简写
result = x1 @ x2.T

维度验证:(n1, N) @ (N, n2) = (n1, n2),完全符合输出形状要求。

方案2:显式广播实现

如果需要明确用广播逻辑拆解运算过程,可以按如下方式调整维度:

# x1新增维度后形状为 (n1, 1, N)
x1_ext = x1.unsqueeze(1)
# x2新增维度后形状为 (1, n2, N)
x2_ext = x2.unsqueeze(0)
# 广播逐元素乘后,对最后一维求和
result = (x1_ext * x2_ext).sum(dim=-1)

该方案与矩阵乘法的计算结果完全等价,只是显式展示了广播配对的过程。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:09:03