python map如何与torch.tensor一起使用?

时间:2019-05-27 13:40:12

标签: python-3.x pytorch fast-ai

我现在正在使用python,因此我试图从pytorch tutorial理解这一行。

x_train, y_train, x_valid, y_valid = map(
    torch.tensor, (x_train, y_train, x_valid, y_valid)
)

我了解地图如何在单个元素上工作

def sqr(a):
    return a * a

a = [1, 2, 3, 4]    

a = map(sqr, a)
print(list(a))

在这里,我需要使用list(a)将地图对象转换回列表。

但是我不明白的是,它如何在多个变量上起作用?

如果我尝试这样做

def sqr(a):
    return a * a


a = [1, 2, 3, 4]
b = [1, 3, 5, 7]

a, b = map(sqr, (a, b))
print(list(a))
print(list(b))

我收到一个错误:TypeError: can't multiply sequence by non-int of type 'list'

请为我澄清一下 谢谢

1 个答案:

答案 0 :(得分:0)

map的工作方式与处理列表/元组的方式相同,无论它是什么,它都会获取给定输入的元素。

drop起作用的原因是,它接受作为输入。

如果展开以下行,则您提供了:

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函数不接受列表。它期望标量类型为平方,ab并非如此,它们是列表。

但是,如果您将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)

它将起作用。