numpy [a,b]与[a][b]的区别

xytpbqjk  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(107)

我正在使用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)
7ivaypg9

7ivaypg91#

请看一下它们的形状:

>>> A[b][c].shape
torch.Size([20])
>>> A[b,c].shape
torch.Size([3])

A[b][c]A[b,c]只有在bc是标量时才意味着相同的东西。当b是一个列表时,使用A[b]选择A的整个 * 行 *,然后使用A[b][c]索引这些行。
您将看到A[b].shape在这里是(3, 20),因此您选择了3行,然后A[b][c]获得第3行。事实上,你的代码没有崩溃的唯一原因是因为它碰巧是c < len(b)。用c = 5尝试它,你会得到一个IndexErrorA[b][c],但A[b,c]仍然有效。

相关问题