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

如何理解PyTorch中一维张量的方向?

PyTorch一维张量的维度理解与矩阵乘法逻辑

先明确核心结论:PyTorch中的一维张量(shape如(3,))既不是行向量也不是列向量,它是无明确方向的一维数值序列,其在矩阵乘法中的行为是运算规则层面的自动适配。

针对你的例子解析

你定义的张量:

a = torch.tensor([1,2])  # shape: (2,)
b = torch.tensor([3,4])  # shape: (2,)
c = b.view(2,1)          # shape: (2,1)

执行a @ b == a @ c返回True的原因:

  • a @ b:PyTorch自动将左侧的一维张量a适配为行向量(shape (1,2)),右侧的一维张量b适配为列向量(shape (2,1)),计算矩阵乘法得到标量1*3 + 2*4 = 11。
  • a @ c:a依然被适配为行向量(1,2),c是明确的二维列向量(2,1),矩阵乘法(1,2) @ (2,1)同样得到标量11,因此两者结果相等。

你的疑问解答

  1. 一维张量的方向是纵向还是横向?
    都不是。一维张量只有一个维度,没有行、列的方向属性,只有二维及以上的张量才有明确的行/列维度区分。

  2. shape(3)与shape(3,1)是否等同?
    完全不等同。shape(3,)是一维张量,shape(3,1)是二维张量(3行1列的列向量),两者的维度数量(ndim)不同,在广播、索引等运算中的行为也存在差异,仅能通过.view()或.unsqueeze()进行维度转换。

  3. shape(3)可视为shape(3,1)或shape(1,3)?
    这是运算规则下的临时适配,而非张量本身的属性:

    • 当一维张量处于矩阵乘法@的左侧时,会被自动处理为行向量(shape (1, N));
    • 当一维张量处于@的右侧时,会被自动处理为列向量(shape (N, 1))。
      这种适配不会改变张量本身的shape和维度数量,仅作用于当前运算过程。

补充验证示例

尝试执行b @ a,结果为tensor(11)(此时b被适配为行向量,a为列向量);但执行c @ a会直接报错,因为c是(2,1)的二维张量,a是(2,)的一维张量,不满足矩阵乘法“前一个张量的列数等于后一个张量的行数”的规则,这也能直观体现一维张量的适配逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:35:28