Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How convert a list with None in it to torch.tensor()?

For example I have a variable z = [1, 3, None, 5, 6]

I would like to do: torch.tensor(z)

and get something like the following:

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

Howhever, such attempt raises an error

TypeError: must be real number, not NoneType

Is there a way to convert such list to a torch.tensor?

I don't want to impute this None value with something else. Numpy arrays are capable of converting such lists np.array([1, 3, None, 5, 6]), but I'd prefer not to convert back and forth variable either.

like image 212
user48115 Avatar asked Sep 02 '25 11:09

user48115


1 Answers

It depends on what you do. Probable the best is to convert None to 0.

Converting things to numpy arrays and then to Torch tensors is a very good path since it will convert None to np.nan. Then you can create the Torch tensor even holding np.nan.

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.])

Try also copy=True inside np.nan_to_num and you will get nan inside your tensor instead of 0.

like image 169
prosti Avatar answered Sep 04 '25 01:09

prosti