本文共 851 字,大约阅读时间需要 2 分钟。
我们认为数组、矩阵、张量都是有形状的,形状可以用像 (2×2×3) 这样的标签来描述。按照从左到右的顺序,第0维、第1维、第2维等依次代表不同的维度。在PyTorch中,我们可以通过切片操作来观察不同维度下的数据。例如,a[1] 可以提取第0维视角下的第1个元素组,而 a[:,:,0] 则可以查看第2维视角下的第0个元素组。
此外,PyTorch 提供了 .unsqueeze 方法,可以在指定的任意维度(如 0、1、2)中插入一个新的空隙。例如,b = a.unsqueeze(2) 会在第2维中插入一个新维度,结果的张量尺寸变为 (2,2,1,3)。这种操作类似于某些编程语言(如 Python 和 MATLAB)中的广播机制,但在这里扩展的是张量的维度结构。
让我们通过一个具体的例子来理解这一点。假设我们有一个 (2×3) 的张量 a,在第0维视角下,它包含两组数据:[1, 2, 3] 和 [4, 5, 6]。当我们使用 .unsqueeze(1) 对其进行操作时,结果是一个 (2×1×3) 的张量,这相当于在第1维中添加了一层包装,形成了一个两层的结构。从第0维视角来看,每个原来的元素组都被包装在一个单独的子张量中,形成 [[[1,2,3]], [[4,5,6]]]。
同样地,当我们使用 .unsqueeze(2) 时,原来的每个元素都会被进一步包装,形成一个 (2×3×1) 的张量。从第2维视角来看,每个原来的元素都变成了一个独立的子张量,结果为 [[[1],[2],[3]], [[4],[5],[6]]]。
这种“套箱”的思想可以帮助我们更直观地理解张量的维度结构。通过不断地在各个维度中插入空隙,我们可以一步步扩展张量的形状。这种操作不仅有助于数据的重新排列,也为后续的高维操作提供了基础。
通过上述例子可以看出,PyTorch 的张量操作通过在各维度中插入空隙的方式,实现了对数据结构的灵活控制。这类似于某些编程语言中的广播机制,但其核心目标是对张量的高维操作进行支持。
转载地址:http://bbafk.baihongyu.com/