Deep-Learning-with-PyTorch

Deep-Learning-with-PyTorch-3.7.1

2020-11-02  本文已影响0人  追求科技的足球

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.]])
上一篇下一篇

猜你喜欢

热点阅读