假设我有一个列表[(0,0),(1,0),(1,1)]
和另一个列表[4,5,6]
,并且矩阵X的大小为(3,2)。我正在尝试将列表分配给像X[0,0] = 4
,X[1,0] = 5
和X[1,1] = 6
这样的矩阵。但似乎我在为张量分配列表时遇到问题
x = torch.zeros(3,2)
indices = [(0,0),(1,0),(1,1)]
value = [4,5,6]
x[indices] = values
错误:
TypeError Traceback (most recent call last)
<ipython-input-7-dec4e6a479a5> in <module>
4 indices = [(0, 0), (1, 0), (1, 1)]
5 values = [4, 5, 6]
----> 6 x[indices] = values
TypeError: can't assign a list to a torch.FloatTensor
答案 0 :(得分:1)
通常,“如何将列表更改为张量”的答案是使用torch.Tensor(list)
。但这并不能解决您的实际问题。
一种方法是关联索引和值,然后对其进行迭代:
for (i,v) in zip(indices,values) :
x[i] = v
答案 1 :(得分:1)
如果您可以使张量indices
比使张量更容易
indices = torch.tensor([(0,0),(1,0),(1,1)])
x[indices[:,0], indices[:,1]] = torch.tensor(values).float()
x
tensor([[4., 0.],
[5., 6.],
[0., 0.]])
由于我们的x
是浮点类型,因此需要将值转换为相同的值。