如何根据给定的索引和值列表创建一维稀疏张量?
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 = 4
和 sparse_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()
我有一个索引和值列表。我想从这个索引和值中创建一个大小为 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 = 4
和 sparse_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()