如何理解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,因此两者结果相等。
你的疑问解答
一维张量的方向是纵向还是横向?
都不是。一维张量只有一个维度,没有行、列的方向属性,只有二维及以上的张量才有明确的行/列维度区分。shape(3)与shape(3,1)是否等同?
完全不等同。shape(3,)是一维张量,shape(3,1)是二维张量(3行1列的列向量),两者的维度数量(ndim)不同,在广播、索引等运算中的行为也存在差异,仅能通过.view()或.unsqueeze()进行维度转换。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
相关产品推荐
相关产品推荐

