WARNING
此API目前是实验性的,可能会用在以后更新的版本,我目前看的文档是 v1.1.0
在TENSOR ATTRIBUTES 中提到,torch.tensor都有三个属性:dtype, device, layout,
而layout支持两种内存布局模式:torch.strided 和 torch.sparse_coo
Torch支持COO(rdinate)格式的稀疏张量,可以有效地存储和处理大多数元素为零的张量。
sparse tensor 可以表示为一对 dense tensors:一个张量的value和一个二维的张量 indices一个稀疏张量可以通过提供这两个张量, 以及稀疏张量的大小来构造(从这些张量是无法推导出来的!)假设我们要定义一个稀疏张量, 其中 3在(0,2)处, 4在(1,0)处, 5在(1,2)处, 然后我们可以这样写:
>>> i = torch.LongTensor([[0, 1, 1],
[2, 0, 2]])
>>> v = torch.FloatTensor([3, 4, 5])
>>> torch.sparse.FloatTensor(i, v, torch.Size([2,3])).to_dense()
0 0 3
4 0 5
[torch.FloatTensor of size 2x3]
注意, LongTensor的输入不是索引元组的列表. 如果你想这样写你的指标, 你应该在把它们传递给稀疏构造函数之前进行转置:
>>> i = torch.LongTensor([[0, 2], [1, 0], [1, 2]])
>>> v = torch.FloatTensor([3, 4, 5 ])
>>> torch.sparse.FloatTensor(i.t(), v, torch.Size([2,3])).to_dense()
0 0 3
4 0 5
[torch.FloatTensor of size 2x3]
也可以构造混合稀疏张量, 其中只有前n个维度是稀疏的, 其余维度是密集的.
>>> i = torch.LongTensor([[2, 4]])
>>> v = torch.FloatTensor([[1, 3], [5, 7]])
>>