关于特定数组及其最终形状的 Numpy 花式索引问题?
Numpy fancy indexing question about specific array and its final shape?
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)
当根据 "rules of broadcasting" 广播的指数形状应该是最终形状时,谁能解释这个最终形状是如何产生的?
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
.[=29 的行的形状=]
现在,row[:, np.newaxis]
为 array([[0], [1], [2]])
且形状为 (3,1)
,X 的每一行形状为 (4,)
。所以 X[[[0], [1], [2]], :]
returns X 的三行打包成形状数组 (3,1) + (4,) = (3, 1, 4)
.
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)
当根据 "rules of broadcasting" 广播的指数形状应该是最终形状时,谁能解释这个最终形状是如何产生的?
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
.[=29 的行的形状=]
现在,row[:, np.newaxis]
为 array([[0], [1], [2]])
且形状为 (3,1)
,X 的每一行形状为 (4,)
。所以 X[[[0], [1], [2]], :]
returns X 的三行打包成形状数组 (3,1) + (4,) = (3, 1, 4)
.