我正在使用pytorch,并有以下情况:
- A是一个nxm矩阵,
- B是小于n的k个索引的正常列表
- c是小于m的单个整数
我现在想做A[b, c] += 1
,并首先将其实现为A[b][c] += 1
。问题是,我得到了我想要的结果与A[b, c] += 1
,其中作为A[b][c] += 1
保持矩阵为全零。
我想知道为什么会这样,因为我希望这两个命令执行相同的操作。我非常感谢你对这件事的看法:)
亲切的问候,菲利克斯
编码:
A = torch.zeros((100, 20))
b = [2, 3, 4]
c = 2
# empty
A[b][c] += 1
print(A)
# works
A[b,c] += 1
print(A)
1条答案
按热度按时间7ivaypg91#
请看一下它们的形状:
A[b][c]
和A[b,c]
只有在b
和c
是标量时才意味着相同的东西。当b
是一个列表时,使用A[b]
选择A
的整个 * 行 *,然后使用A[b][c]
索引这些行。您将看到
A[b].shape
在这里是(3, 20)
,因此您选择了3行,然后A[b][c]
获得第3行。事实上,你的代码没有崩溃的唯一原因是因为它碰巧是c < len(b)
。用c = 5
尝试它,你会得到一个IndexError
和A[b][c]
,但A[b,c]
仍然有效。