Python 如何迭代一组张量并将每个组中的元素传递给函数?

Python 如何迭代一组张量并将每个组中的元素传递给函数?,python,function,iteration,pytorch,tensor,Python,Function,Iteration,Pytorch,Tensor,假设有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.00

假设有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(火炬7)中,它们具有以下功能:

[self] map2(tensor1, tensor2, function(x, xt1, xt2))
它将给定的
函数
应用于
self
的所有元素

我的问题是:

  • python(pytorch)中有类似的函数吗
  • 是否有任何pythonic方法来迭代3个张量并获得每个张量的相应元素,而不使用
    for loop
    index
  • 例如:

    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和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
    (注意,这会进行适当的更改,不会返回新的Tensor)

    >>> 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]])
    >>>