Как преобразовать список с None в torch.tensor ()? - PullRequest
2 голосов
/ 05 июня 2019

Например, у меня есть переменная 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 ]

2 голосов
/ 05 июня 2019

Это зависит от того, что вы делаете.Вероятно, лучше всего конвертировать None в 0.

. Преобразование объектов в массивы с нулями, а затем в тензоры Torch - очень хороший путь, поскольку конвертирует None в np.nan.Затем вы можете создать тензор Факела, даже удерживая 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.])

Попробуйте также copy=True внутри np.nan_to_num, и вы получите nan внутри вашего тензоравместо 0.

1 голос
/ 05 июня 2019

У меня такое ощущение, что конструкция тензора из источника данных не допускает такой же снисходительности, как у Numpy с разрешением None типов .Пожалуйста, смотрите также здесь для обсуждения, где другие спрашивали о None типах в тензорах.

Похоже, вам придется подумать о том, как обрабатывать ваши недостающие данные, либо путем вмененияили другая форма очистки данных.

Или, возможно, тензорная форма - это то, что вам нужно.

...