python - 关于特定数组及其最终形状的 Numpy 奇特索引问题?

标签 python numpy indexing reshape

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/

相关文章:

javascript - 如何在 Mongoose 模式中创建多个唯一数据点?

python - 异常后如何继续for循环?

python - 使用 Python/Sklearn 创建并拟合乘法线性回归

performance - Elasticsearch 中的索引别名和通配符索引端点是否完全相同?

python - 使用seaborn.distplot绘制密度图时如何防止seaborn平滑直方图?

python - 为什么与 np.int16 的相同操作相比,dtype np.int64 的操作要慢得多?

mysql - 如何确认我已禁用表索引?

python - 如何垂直打包 tkinter 按钮?

python - 在 Jinja2 中获取请求参数

python - 如何为动态添加的属性定义setter、getter