import numpy as np
X = np.arange(12).reshape((3, 4))
row = np.array([0, 1, 2])
mask = np.array([1, 0, 1, 0], dtype=bool)
print(X[row[:, np.newaxis], mask])
X = [[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11]]
row = [0, 1, 2]
mask = [True, False, True, False]
添加新轴后,数组行更改为二维数组。行的形状是 (3,1)
row = [[0],
[1],
[2]]
print()之后的结果 怎么办??
[[0, 2],
[4, 6],
[8, 10]]
为了理解给定的 Python 代码及其生成的输出,让我们逐步分解该过程,重点关注所涉及的关键组件:NumPy 数组、索引和用于高级选择的形状操作。
1。 NumPy 数组创建
代码首先创建一个名为 X: 的 2D NumPy 数组:
X = np.arange(12).reshape((3, 4))
[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]
2。索引数组
定义了两个附加数组:
由于 True 对应 1,False 对应 0,因此它实际上变为 [True, False, True, False],这意味着它将选择第一列和第三列并跳过第二列和第四列。
3.添加新轴
[[0], [1], [2]]
这种形状的变化对于下一步至关重要。
4。高级索引
表达式 X[row[:, np.newaxis], mask] 对 X: 执行高级索引
因为 row 已被重塑为 2D 数组,并且 mask 是 1D 布尔数组,所以 NumPy 广播它们以执行按元素选择。这意味着对于 row 指定的每一行,它选择 mask 为 True 的元素。
5。结果说明
最终输出为:
[[ 0, 2], [ 4, 6], [ 8, 10]]
以下是实现结果的方法:
因此,该操作从第一行选择元素 [0, 2],从第二行选择元素 [4, 6],从第三行选择元素 [8, 10],与指定的行索引和列掩码对齐。这展示了 NumPy 高级索引功能的强大方面,可以通过广播和布尔掩码实现复杂的选择。