如何将其中没有任何内容的列表转换为torch.tensor()?

时间:2019-06-05 07:28:56

标签: python pytorch tensor

例如,我有一个变量z = [1, 3, None, 5, 6]

我想做:torch.tensor(z)

并获得如下内容:

torch.tensor([1,3, None, 5,6], dtype=torch.float)

但是,这样的尝试会引发错误

  

TypeError:必须为实数,而不是NoneType

是否可以将此类列表转换为torch.tensor

我不想用其他方式来推算这个None值。 Numpy数组能够转换这样的列表np.array([1, 3, None, 5, 6]),但是我也不希望来回转换变量。

2 个答案:

答案 0 :(得分:2)

这取决于您的工作。最好的办法是将None转换为0

将事物转换为numpy数组然后转换为Torch张量是一个很好的途径,因为它将把None转换为np.nan。然后,您甚至可以按住np.nan来创建Torch张量。

import torch
import numpy as np

a = [1,3, None, 5,6]
b = np.array(a,dtype=float) # you will have np.nan from None
print(b) #[ 1.  3. nan  5.  6.]
np.nan_to_num(b, copy=False)
print(b) #[1. 3. 0. 5. 6.]
torch.tensor(b, dtype=torch.float) #tensor([1., 3., 0., 5., 6.])

也尝试在np.nan_to_num内使用copy=True,您将在张量内得到nan而不是0。

答案 1 :(得分:1)

I have a feeling that the tensor construction from data source doesn't allow the same kind of leniency that Numpy has with allowing None types。另请参见here,以获取其他人询问的关于张量的None类型的讨论。

看起来您将不得不考虑如何通过插补或其他形式的数据清除来处理丢失的数据。

或者您可能需要tensorshape