参考链接: torch.reshape(input, shape)
说明:
返回一个张量,内容和原来的张量相同,但是具有不同形状.
并且尽可能返回视图,否则才会返回拷贝,
因此,需要注意内存共享问题.
传入的参数可以有一个-1,
表示其具体值由其他维度信息和元素总个数推断出来.
代码实验:
(base) PS C:\Users\chenxuqi> python
Python 3.7.4 (default, Aug 9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> a = torch.arange(4.)
>>> a
tensor([0., 1., 2., 3.])
>>> torch.reshape(a, (2, 2))
tensor([[0., 1.],
[2., 3.]])
>>> b = torch.tensor([[0, 1], [2, 3]])
>>> b
tensor([[0, 1],
[2, 3]])
>>> torch.reshape(b, (-1,))
tensor([0, 1, 2, 3])
>>>
>>>
>>>
>>> a = torch.arange(12)
>>> a
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> a = torch.reshape(a,(3,4))
>>> a
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>>
>>>
>>>
>>>
>>>
>>>
>>> a = torch.arange(12)
>>> b = a.reshape(3,4)
>>> a
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> b
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> a[0] = 2020
>>> b[0][1] = 20200910
>>> a
tensor([ 2020, 20200910, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11])
>>> b
tensor([[ 2020, 20200910, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> # 由此可见,两者共享内存
...
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> a = torch.arange(12)
>>> b = a.reshape(3,4)
>>> c = b.permute(1,0).reshape(2,6) # permute(1,0)返回的张量不连续
>>> a
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> b
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> c
tensor([[ 0, 4, 8, 1, 5, 9],
[ 2, 6, 10, 3, 7, 11]])
>>>
>>>
>>> a[0] = 9999
>>> b[0][1] = 8888
>>> c[1][5] = 7777
>>> a
tensor([9999, 8888, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> b
tensor([[9999, 8888, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> c
tensor([[ 0, 4, 8, 1, 5, 9],
[ 2, 6, 10, 3, 7, 7777]])
>>>
>>> # 由此可见a和b共享内存,但是a和b不与c共享内存
...
>>>
>>>
>>>