map
работает с одним так же, как и со списком / кортежем списков, он выбирает элемент заданного ввода независимо от того, что это такое.
Причина, по которой torch.tensor
работает, если принимает список в качестве входных данных.
Если развернуть следующую предоставленную вами строку:
x_train, y_train, x_valid, y_valid = map(
torch.tensor, (x_train, y_train, x_valid, y_valid)
)
это то же самое, что и делать:
x_train, y_train, x_valid, y_valid = [torch.tensor(x_train), torch.tensor(y_train), torch.tensor(x_valid), torch.tensor(y_valid)]
С другой стороны, ваша функция sqr
не принимает списки.Предполагается, что скалярный тип возводится в квадрат, что не относится к вашим a
и b
, это списки.
Однако, если вы измените sqr
на:
def sqr(a):
return [s * s for s in a]
a = [1, 2, 3, 4]
b = [1, 3, 5, 7]
a, b = map(sqr, (a, b))
или, как предложено @Jean, a, b = map(sqr, x) for x in (a, b)
Это будет работать.