python 地图如何与 torch.tensor 配合使用?
How does python map works with torch.tensor?
我现在在 python 所以我试图从 pytorch tutorial 理解这一行。
x_train, y_train, x_valid, y_valid = map(
torch.tensor, (x_train, y_train, x_valid, y_valid)
)
我了解 map 在单个元素上的工作原理
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'
请为我澄清一下
谢谢
map
在单个列表上的工作方式与在列表 list/tuple 上的工作方式相同,它获取给定输入的一个元素,不管它是什么。
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)
它会起作用的。
我现在在 python 所以我试图从 pytorch tutorial 理解这一行。
x_train, y_train, x_valid, y_valid = map(
torch.tensor, (x_train, y_train, x_valid, y_valid)
)
我了解 map 在单个元素上的工作原理
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'
请为我澄清一下 谢谢
map
在单个列表上的工作方式与在列表 list/tuple 上的工作方式相同,它获取给定输入的一个元素,不管它是什么。
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)
它会起作用的。