最近在看这里的内容,对于“维度”、“折叠”这些表述很难理解。在看了几篇讲解之后,目前自己形成了比较直观的理解。记录一下防止未来再产生同样的困惑。
在这里我们定义两个2*3的张量
a=[ [ 0 ,0 ,0 ] , [0 , 0 , 0] ]
b=[ [ 1, 1, 1] , [1 , 1, 1]
其实大于二维也一样,但是二维比较容易以传统矩阵的形式理解。
我们把a b 写成矩阵的形式。
下面就可以讲维度的问题了,对于a b 他们的第一维,第二维自然就是他们的行和列。
stack函数其实就是把这两个张量连接起来。
我们最容易理解的就是a b内部先不做改变。就是下面的
torch.stack((a,b),dim=0)
其实就是在外部把他们连接起来,类似于把a b 看作两个数,构造一个1*2的矩阵,像这样的形式。
此时的dim=0 也就是我们扩展出的这个维度“2”的位置是最终张量2*2*3的前面的那个2
那么如果我们设置dim=1,也就是扩展的维度“2”在2*2*3的中间那个2的话,就要对a b 的内部进行改变了。那此时我们实际上是把a b的“行”扩展了,那么如何扩展呢。其实就是把原来的[ 0, 0 , 0]
下面加一行b的[1 ,1 , 1]就可以了
同理,dim还可以等于2,因为a张量有两个维度。
那dim=2,其实就是对2*3的这个3进行扩展。也就是把每一个单独的0扩展出一个维度变成[ 0 ,1 ]
代码运行结果如下
其实对于张量来说,我目前理解是越在后面的维度越低。dim=0.等于是直接把两个平行世界放在一起。两个世界(张量)内部不会有什么变化。dim=2的时候就把目光放到最低维上了,也就是只有列向量。只有列向量的时候也就是只能看到单行,元素自然就只有一个0,而不是一整列了