如何从给定的索引和值列表创建一维稀疏张量?
Posted
技术标签:
【中文标题】如何从给定的索引和值列表创建一维稀疏张量?【英文标题】:How to create a 1D sparse tensors from given list of indices and values? 【发布时间】:2020-07-24 15:01:06 【问题描述】:我有一个索引和值的列表。我想从这个索引和值创建一个大小为 30000 的稀疏张量,如下所示。
indices = torch.LongTensor([1,3,4,6])
values = torch.FloatTensor([1,1,1,1])
所以,我想构建一个 30k 维稀疏张量,其中索引 [1,3,4,6]
为 1,其余为 0。我该怎么做?
我想高效地存储这些稀疏张量的序列。
【问题讨论】:
【参考方案1】: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()
【讨论】:
以上是关于如何从给定的索引和值列表创建一维稀疏张量?的主要内容,如果未能解决你的问题,请参考以下文章