我如何迭代 pytorch 二维张量?

How do i iterate over pytorch 2d tensors?

X = np.array([
    [-2,4,-1],
    [4,1,-1],
    [1, 6, -1],
    [2, 4, -1],
    [6, 2, -1],
    ])

for epoch in range(1,epochs):
    for i, x in enumerate(X):

X = torch.tensor([
    [-2,4,-1],
    [4,1,-1],
    [1, 6, -1],
    [2, 4, -1],
    [6, 2, -1],
    ])

当它是一个 numpy 数组时,循环很好。但是我想使用 pytorch 张量,那么枚举有什么替代方法,或者我如何在第二行遍历上述张量?

enumerate 需要一个可迭代对象,因此它也适用于 pytorch 张量:

X = torch.tensor([
    [-2,4,-1],
    [4,1,-1],
    [1, 6, -1],
    [2, 4, -1],
    [6, 2, -1],
    ])

for i, x in enumerate(X):
    print(x)
    tensor([-2,  4, -1])
    tensor([ 4,  1, -1])
    tensor([ 1,  6, -1])
    tensor([ 2,  4, -1])
    tensor([ 6,  2, -1])

如果要遍历底层数组:

for i, x in enumerate(X.numpy()):
    print(x)
    [-2  4 -1]
    [ 4  1 -1]
    [ 1  6 -1]
    [ 2  4 -1]
    [ 6  2 -1]

但是请注意,pytorch 的底层数据结构是 numpy 数组,因此您可能希望 避免在张量上循环 ,并且应该考虑向量化任何通过 pytorch 或 numpy 进行操作。

x = torch.tensor([ 
                 [-2,4,-1],
                 [4,1,-1],
                 [1, 6, -1],
                 [2, 4, -1],
                 [6, 2, -1],
                          ])

for i in x:
    print(i)

输出:

tensor([-2,  4, -1])
tensor([ 4,  1, -1])
tensor([ 1,  6, -1])
tensor([ 2,  4, -1])
tensor([ 6,  2, -1])

迭代 pytorch 张量或 numpy 数组比迭代列表慢得多。

将张量转换为列表并对其进行迭代:

l = tens.tolist()
如果需要从计算图中分离张量,则需要

detach()

l = tens.detach().tolist()

或者,您可以使用 numpy 数组并在二维数组的每一行上使用它的一些快速函数,以便从该行获取所需的值。