permute
permute
的作用是调换Tensor的维度。我们可以把一个多维数组看作一个平面/立方体/超立方体,permute的作用就是改变我们“观察”这个多为数组的角度。例如:
In [20]: a
Out[20]:
tensor([[0, 1, 2],
[3, 4, 5]])
In [21]: a.permute(1,0)
Out[21]:
tensor([[0, 3],
[1, 4],
[2, 5]])
可以注意到上面这个例子里面交换了第一和第二个维度,相当于把a
这个二维数组“转置”了。
reshape和view
关于这两个的区别可以参考:https://blog.csdn.net/Flag_ing/article/details/109129752
简单来说:功能类似,但是reshape兼容性更好,如果要考虑变换前后的两个tensor共享的是同一片存储区,就用view吧
如果使用view
或者reshape
,其作用可以这样理解:先把原来的数组按行取出展开成一个一维数组,然后把数组中的元素依次放入view
或者reshape
所传入参数的设定的大小的数组中。例如:
In [22]: a.reshape(3,2)
Out[22]:
tensor([[0, 1],
[2, 3],
[4, 5]])
In [23]: a.view(3,2)
Out[23]:
tensor([[0, 1],
[2, 3],
[4, 5]])
上面的结果就与permute大不同。
eniops
这个库可以很方便地操作向量维度。