view只能作用在连续的张量上(张量中元素的内存地址是连续的)。而reshape连续or非连续都可以。
调用x.reshape的时候,如果x在内存中是连续的,那么x.reshape会返回一个view(原地修改,此时内存地址不变),否则就会返回一个新的张量(这时候内存地址变了)。
python
import torch
a = torch.rand(2, 3)
b = a.permute(1, 0) # 地址不连续
c = b.reshape(6)
print(id(a), id(b), id(c))
# 2423946308560 2423946344864 2423946631984
d = b.view(6) # 报错