PyTorch 稀疏张量的维数必须为 nDimI + nDimV

PyTorch Sparse Tensors number of dimensions must be nDimI + nDimV

我正在尝试将值插入 gd 以协调 [1,0]。下面是矩阵。当我尝试这个时,我得到一个 RuntimeError。

>>> import torch
>>> cd = [[1, 0]]
>>> gd = [0.39613232016563416]
>>> i = torch.LongTensor(cd)
>>> v = torch.FloatTensor(gd)
>>> p = torch.rand(2)
>>> i

 1  0
[torch.LongTensor of size 1x2]

>>> v

 0.3961
[torch.FloatTensor of size 1]

>>> p

 0.4678
 0.0996
[torch.FloatTensor of size 2]

>>> torch.sparse.FloatTensor(i.t(), v, torch.Size(list(p.size()))).to_dense()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: invalid argument 2: number of dimensions must be nDimI + nDimV at /Users/soumith/code/builder/wheel/pytorch-src/torch/lib/THS/generic/THSTensor.c:169

两件事。

1) 现在 p 是 1 阶张量。要在位置 [1,0] 插入一些东西,它需要是 2 阶张量。

2) 你不需要用稀疏张量做复杂的事情。只需 p[cd[0], cd[1]] = v[0] 就可以了。其中 cd = torch.LongTensor([row_idx, col_idx])

所以:

>>> cd = torch.LongTensor([1,0])
>>> gd = [0.39613232016563416]
>>> v = torch.FloatTensor(gd)
>>> p = torch.rand((2,2))
>>> p
 0.9342  0.8539
 0.7044  0.0823

[torch.FloatTensor of size 2x2]

>>> p[cd[0], cd[1]] = v[0]
>>> p
0.9342  0.8539
0.3961  0.0823

[torch.FloatTensor of size 2x2]

就这么简单。