3.7.1 索引到存储
让我们看看在2D点中实际上如何建立存储索引。 使用.storage属性可以访问给定张量的存储:
# In[17]:
points = torch.tensor([[4.0, 1.0], [5.0, 3.0], [2.0, 1.0]])points.storage()
# Out[17]:
4.0
1.0
5.0
3.0
2.0
1.0
[torch.FloatStorage of size 6]
即使张量报告自己具有三行两列,但引擎盖下的存储是大小为6的连续数组。从这个意义上说,张量仅知道如何将一对索引转换为存储中的某个位置。
我们也可以手动将其索引到存储中。 例如:
# In[18]:
points_storage = points.storage()
points_storage[0]
# Out[18]:
4.0
# In[19]:
points.storage()[1]
# Out[19]:
1.0
我们无法使用两个索引来索引2D张量的存储。 存储器的布局始终是一维的,而不考虑可能引用它的任何张量和所有张量的维数。
在这一点上,更改存储的值会导致更改其引用张量的内容不足为奇
# In[20]:
points = torch.tensor([[4.0, 1.0], [5.0, 3.0], [2.0, 1.0]])
points_storage = points.storage()
points_storage[0] = 2.0
points
# Out[20]:
tensor([[2., 1.],
[5., 3.],
[2., 1.]])
网友评论