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

Python PyTorch稀疏张量维数必须为nDimI+;nDimV,python,machine-learning,deep-learning,pytorch,tensor,Python,Machine Learning,Deep Learning,Pytorch,Tensor,我试图在gd中插入值以协调[1,0]。以下是矩阵。当我尝试此操作时,会出现运行时错误 >>> import torch >>> cd = [[1, 0]] >>> gd = [0.39613232016563416] >>> i = torch.LongTensor(cd) >>> v = torch.FloatTensor(gd) >>> p = torch.rand(2) >&g

我试图在
gd
中插入值以协调
[1,0]
。以下是矩阵。当我尝试此操作时,会出现运行时错误

>>> 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
导入火炬 >>>cd=[[1,0]] >>>gd=[0.39613232016563416] >>>i=火炬长传感器(cd) >>>v=火炬浮动张量(gd) >>>p=火炬兰特(2) >>>我 1 0 [尺寸为1x2的火炬式传感器] >>>五 0.3961 [火炬.大小为1的漂浮张量] >>>p 0.4678 0.0996 [火炬.大小为2的漂浮张量] >>>torch.sparse.FloatTensor(i.t(),v,torch.Size(list(p.Size()))).to_densed() 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 运行时错误:无效参数2:在/Users/soumith/code/builder/wheel/pytorch src/torch/lib/THS/generic/THSTensor.c:169处,维度数必须为nDimI+nDimV 两件事

1) 现在,
p
是秩1的张量。要在位置
[1,0]
中插入某个内容,它需要是秩2的张量

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

因此:

[火炬.尺寸为2x2的浮标张量]

[火炬.尺寸为2x2的浮标张量]


很简单。

结果是问题在于
p.size()
给出了
(2L,)
len((2L,)
是1,就像你指出的那样,所以我只是添加了一个if块,以确保大小始终是两个,例如
s=list(p.size())
然后
if len(s)==1:s.append(1)
这样我就可以接受我期望从神经网络得到的任何形状的张量。
>>> 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
>>> p[cd[0], cd[1]] = v[0]
>>> p
0.9342  0.8539
0.3961  0.0823