例如,我有一个变量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])
,但是我也不希望来回转换变量。
答案 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。