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

PyTorch张量广播与批量矩阵乘法维度适配方法咨询

问题1:形状为(a,b,c)的张量与(b,c)数组广播运算得到(a,c)输出

要实现该需求,核心是利用PyTorch自动广播机制,先让(b,c)形状的数组自动扩展为(a,b,c)(自动在第0维补维度),再根据运算需求得到(a,c)结果:

  • 假设输入张量为X(形状[a,b,c]),数组为Y(形状[b,c])
  • 示例代码(以对应元素相乘后沿b维度求和为例):
    # 广播后逐元素相乘,再沿b维度求和得到(a,c)输出
    result = (X * Y).sum(dim=1)
    
问题2:批量矩阵乘法实现(416,20,3)与(416,20)的运算得到(416,3)

针对你的具体场景,有两种简洁实现方式:

方式1:调整B的形状后使用torch.matmul

将B的形状从(416,20)扩展为(416,20,1),torch.matmul会自动处理batch维度的矩阵乘法:

import torch

A = torch.randn(416, 20, 3)
B = torch.randn(416, 20)

# 扩展维度后执行矩阵乘法,再移除最后一个冗余维度
C = torch.matmul(A, B.unsqueeze(-1)).squeeze(-1)
print(C.shape)  # 输出 torch.Size([416, 3])

方式2:使用torch.einsum(维度映射更直观)

爱因斯坦求和符号可直接指定维度运算关系,可读性更强:

C = torch.einsum('abc,ab->ac', A, B)
print(C.shape)  # 输出 torch.Size([416, 3])

这里'abc,ab->ac'表示:对每个batch的a维度,将A的b维度与B的b维度相乘求和,最终保留a和c维度,完全匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:53:00