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

PyTorch中如何不使用循环实现沿新维度的张量乘法

无循环实现张量广播乘法方案

核心逻辑是利用张量的广播机制,通过给低维张量插入扩展维度,让两个张量的维度匹配后直接做元素级乘法,不需要编写for循环。

通用实现思路

已知t1形状为[a, b],t2形状为[c],只需要给t1的最后一维插入一个扩展维度,让t1形状变为[a, b, 1],形状为[c]的t2会自动广播为[1, 1, c],二者做元素乘法后得到的结果就是形状为[a, b, c]的目标张量t3,完全符合你给出的运算规则。

各主流框架代码实现

NumPy 实现

import numpy as np

# 假设t1、t2为已定义的numpy数组
t3 = t1[..., np.newaxis] * t2
# 等价写法:t3 = np.expand_dims(t1, axis=-1) * t2

PyTorch 实现

import torch

# 假设t1、t2为已定义的torch张量
t3 = t1.unsqueeze(-1) * t2
# 等价写法:t3 = t1[..., None] * t2

TensorFlow 实现

import tensorflow as tf

# 假设t1、t2为已定义的tf张量
t3 = tf.expand_dims(t1, axis=-1) * t2

结果验证示例

我们用一组实际数值验证运算正确性:
设定a=2、b=3、c=2:

  • t1 = [[1,2,3],[4,5,6]],形状[2,3]
  • t2 = [10, 20],形状[2]

运算得到的t3结果如下,和预期规则完全匹配:

# 最后一维第0个切片
[:, :, 0] = [[10, 20, 30], [40, 50, 60]]
# 最后一维第1个切片
[:, :, 1] = [[20, 40, 60], [80, 100, 120]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 17:36:03