Tensor Broadcast

Tensor Broadcast

两个不同形状的矩阵进行(element-by-elemnet)算术运算时,更小维度的矩阵通过Broadcast变成与更大维度矩阵相同的形状。底层通过算法实现,不会进行数据拷贝。

例如:

a = torch.tensor([1, 2, 3])
b = torch.tensor(2)
a * b
tensor([2, 4, 6])

Broadcast规则

从右向左比较Tensor的维度

  • 如果维度相同,保持不变
  • 如果一个维度为1,进行stretch操作
  • 如果维度不同,则运行错误

Broadcast示例

a = torch.tensor([[ 0,  0,  0],
                  [10, 10, 10],
                  [20, 20, 20],
                  [30, 30, 30]])
b = torch.tensor([1, 2, 3])
a + b
tensor([[ 1,  2,  3],
        [11, 12, 13],
        [21, 22, 23],
        [31, 32, 33]])

a = torch.tensor([[ 0], [10], [20], [30]])
b = torch.tensor([1, 2, 3])
a * b
tensor([[ 0,  0,  0],
        [10, 20, 30],
        [20, 40, 60],
        [30, 60, 90]])

维度不同:

PyTorch Broadcast API

torch.broadcast_tensors()

x = torch.arange(3).view(1, 3)
y = torch.arange(2).view(2, 1)

torch.broadcast_tensors(x, y)
(tensor([[0, 1, 2],
         [0, 1, 2]]),
 tensor([[0, 0, 0],
         [1, 1, 1]]))

torch.broadcast_to()

x = torch.arange(3)
torch.broadcast_to(x, (3, 3))
tensor([[0, 1, 2],
        [0, 1, 2],
        [0, 1, 2]])

参考文献

posted @   ByteHandler  阅读(148)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示