0
1
2
3
4
5
[torch.LongStorage of size 6]
print(id(b.storage())==id(a.storage()))
得到的结果为True,可见a和b的storage存储地址一样的。共享storage
0
1
2
3
4
5
[torch.LongStorage of size 6]
可见此时的c和a是共享内存空间的。
c里面的是,
tensor([0, 1])
2 自动广播法则
# 实现自动广播
a=t.ones(3,2)
b=t.zeros(2,3,1)
tensor([[[1., 1.],
[1., 1.],
[1., 1.]],
[[1., 1.],
[1., 1.],
[1., 1.]]])
第一步:a是2维,b是三维。所以在较小的a前面补1
即 a.unsqueeze(0),a的形状变成(1,3,2),b的形状(2,3,1)
第二步:a和b在第一维和第三维的形状不一样,其中一个为1
可以利用广播法则扩展,两个形状都变成了(2,3,2)
expand重复数组,但不会复制数组,所以不会额外的占用空间。返回一个视图,对返回的张量不会分配新内存,返回张良内存是不连续的。