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的連續(xù)數(shù)組贫导。從這個意義上說简软,張量僅知道如何將一對索引轉(zhuǎn)換為存儲中的某個位置掰担。
我們也可以手動將其索引到存儲中。 例如:
# In[18]:
points_storage = points.storage()
points_storage[0]
# Out[18]:
4.0
# In[19]:
points.storage()[1]
# Out[19]:
1.0
我們無法使用兩個索引來索引2D張量的存儲谒出。 存儲器的布局始終是一維的,而不考慮可能引用它的任何張量和所有張量的維數(shù)邻奠。
在這一點上笤喳,更改存儲的值會導(dǎo)致更改其引用張量的內(nèi)容不足為奇
# 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.]])