如何迭代一组张量并将每组中的元素传递给函数?
How to iterate over a group of tensor and pass the elements from each group to a function?
假设你有 3 个相同大小的张量:
a = torch.randn(3,3)
a = ([[ 0.1945, 0.8583, 2.6479],
[-0.1000, 1.2136, -0.3706],
[-0.0094, 0.4279, -0.6840]])
b = torch.randn(3, 3)
b = ([[-1.1155, 0.2106, -0.2183],
[ 1.6610, -0.6953, 0.0052],
[-0.8955, 0.0953, -0.7737]])
c = torch.randn(3, 3)
c = ([[-0.2303, -0.3427, -0.4990],
[-1.1254, 0.4432, 0.3999],
[ 0.2489, -0.9459, -0.5576]])
在Lua(torch7)中,它们有this函数:
[self] map2(tensor1, tensor2, function(x, xt1, xt2))
将给定的 function
应用于 self
的所有元素。
我的问题是:
- python(pytorch)中有没有类似的功能?
- 是否有任何 pythonic 方法可以在不使用
for loop
和 indices
的情况下迭代 3 个张量并获取每个张量的相应元素?
例如:
0.1945 -1.1155 -0.2303
0.8583 0.2106 -0.3427
2.6479 -0.2183 -0.4990
-0.1000 1.6610 -1.1254
...
Edit_1: 我也试过itertools.zip_longest和zip,但是结果和上面说的不一样
您可以使用 Python 的 map
功能,类似于您提到的功能。像这样:
>>> tensor_list = [torch.tensor([i, i, i]) for i in range(3)]
>>> list(map(lambda x: x**2, tensor_list))
[tensor([0, 0, 0]), tensor([1, 1, 1]), tensor([4, 4, 4])]
>>>
编辑:对于仅 PyTorch 的方法,您可以使用 torch.Tensor.apply_
(请注意,这会进行适当的更改,而不是 return 新张量)
>>> x = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> x.apply_(lambda y: y ** 2)
tensor([[ 1, 4, 9],
[16, 25, 36],
[49, 64, 81]])
>>>
假设你有 3 个相同大小的张量:
a = torch.randn(3,3)
a = ([[ 0.1945, 0.8583, 2.6479],
[-0.1000, 1.2136, -0.3706],
[-0.0094, 0.4279, -0.6840]])
b = torch.randn(3, 3)
b = ([[-1.1155, 0.2106, -0.2183],
[ 1.6610, -0.6953, 0.0052],
[-0.8955, 0.0953, -0.7737]])
c = torch.randn(3, 3)
c = ([[-0.2303, -0.3427, -0.4990],
[-1.1254, 0.4432, 0.3999],
[ 0.2489, -0.9459, -0.5576]])
在Lua(torch7)中,它们有this函数:
[self] map2(tensor1, tensor2, function(x, xt1, xt2))
将给定的 function
应用于 self
的所有元素。
我的问题是:
- python(pytorch)中有没有类似的功能?
- 是否有任何 pythonic 方法可以在不使用
for loop
和indices
的情况下迭代 3 个张量并获取每个张量的相应元素?
例如:
0.1945 -1.1155 -0.2303
0.8583 0.2106 -0.3427
2.6479 -0.2183 -0.4990
-0.1000 1.6610 -1.1254
...
Edit_1: 我也试过itertools.zip_longest和zip,但是结果和上面说的不一样
您可以使用 Python 的 map
功能,类似于您提到的功能。像这样:
>>> tensor_list = [torch.tensor([i, i, i]) for i in range(3)]
>>> list(map(lambda x: x**2, tensor_list))
[tensor([0, 0, 0]), tensor([1, 1, 1]), tensor([4, 4, 4])]
>>>
编辑:对于仅 PyTorch 的方法,您可以使用 torch.Tensor.apply_
(请注意,这会进行适当的更改,而不是 return 新张量)
>>> x = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> x.apply_(lambda y: y ** 2)
tensor([[ 1, 4, 9],
[16, 25, 36],
[49, 64, 81]])
>>>