如何根据给定的索引和值列表创建一维稀疏张量?

How to create a 1D sparse tensors from given list of indices and values?

我有一个索引和值列表。我想从这个索引和值中创建一个大小为 30000 的稀疏张量,如下所示。

indices = torch.LongTensor([1,3,4,6])
values = torch.FloatTensor([1,1,1,1])

所以,我想构建一个 30k 维的稀疏张量,其中索引 [1,3,4,6] 为 1,其余为 0。我该怎么做?

我想高效地存储这种稀疏张量的序列。

In general indices 张量需要具有 (sparse_dim, nnz) 的形状,其中 nnz 是非零条目的数量, sparse_dim 是非零条目的数量稀疏张量的维度。

在你的情况下 nnz = 4sparse_dim = 1 因为你想要的张量是一维的。要使您的索引正常工作,我们需要做的就是在 indices 的前面插入一个单一维度,使其形状为 (1, 4).

t = torch.sparse_coo_tensor(indices.unsqueeze(0), values, (30000,))

或等同于

t = torch.sparse.FloatTensor(indices.unsqueeze(0), values, (30000,))

请记住,稀疏张量仅支持 limited number of operations。要将张量转换回它的密集(低效)表示,您可以使用 to_dense 方法

t_dense = t.to_dense()