我如何迭代 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 数组并在二维数组的每一行上使用它的一些快速函数,以便从该行获取所需的值。
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 数组并在二维数组的每一行上使用它的一些快速函数,以便从该行获取所需的值。