X = np.arange(12).reshape((3, 4)) => shape (3,4)
row = np.array([0, 1, 2])
row[:, np.newaxis] => shape (3,1)
X[row[:, np.newaxis], :] => shape (3,1,4)
根据“广播规则”,广播的指数形状应该是最终形状,任何人都可以解释这个最终形状是如何发生的吗?
最佳答案
X[i, :]
将X
的第 i 行作为形状数组(X.shape[1],)
X[[i], :]
将X
的第 i 行作为形状数组(1, X.shape[ 1])
X[[[i]], :]
将X
的第 i 行作为形状数组(1, 1, X.shape[1])
X[[[[i]]], :]
将X
的第 i 行作为形状数组(1, 1, 1, X.shape[1])
...
正如您所看到的,通过这种方式,您只是引入了额外的维度,并且输出数组的形状是索引数组的形状+X
行的形状。
现在,row[:, np.newaxis]
是 array([[0], [1], [2]])
并且具有形状 (3,1)
并且 X 的每一行都有形状 (4,)
。因此,X[[[0], [1], [2]], :]
返回 X 的三行,打包成形状为 (3,1) + (4,) 的数组= (3, 1, 4)
.
关于python - 关于特定数组及其最终形状的 Numpy 奇特索引问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59695614/