📜  NumPy-高级索引(1)

📅  最后修改于: 2023-12-03 15:03:19.359000             🧑  作者: Mango

NumPy 高级索引

NumPy 高级索引用于获取 NumPy 中某些值的子集。高级索引可以基于整数数组、布尔数组或由两者组成的组合数组进行。

整数数组索引

整数数组索引是从数组中选择特定元素的一种方法。可以通过将整数列表、数组或切片传递给索引数组来实现。如果每个维度中使用一个整数,则返回的数组的形状与索引数组的形状相同。

import numpy as np

x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[[0, 1, 2], [0, 1, 0]]
print(y)

输出:

[1 4 5]

在上面的示例中,使用了两个数组以获取索引。

第一个索引数组是 [0, 1, 2],即选择第一维中的 0, 1, 2 三个元素。

第二个索引数组是 [0, 1, 0],即选择第二维中的 0, 1, 0 三个元素。

所以,最终的结果是选中了 x 中的以下元素:

x[0, 0], x[1, 1], x[2, 0]
布尔数组索引

布尔数组索引是数组中选择某些元素的另一种方式。可以使用 bool 数组来选择需要的元素。

import numpy as np

x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[x > 2]
print(y)

输出:

[3 4 5 6]

在上面的示例中,使用了一个 bool 数组以获取索引。

这个 bool 数组是 x > 2,即如果 x 中的元素大于 2,则在数组 y 中选择这个元素。

所以,最终的结果是选中了 x 中的以下元素:

x[1, 0], x[1, 1], x[2, 0], x[2, 1]
结合使用整数数组和布尔数组索引

可以结合使用整数数组和布尔数组索引。

import numpy as np

x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[x > 2]
z = x[x[:, 1] % 2 == 0]
print(y)
print(z)

输出:

[3 4 5 6]
[[1 2]
 [5 6]]

在上面的示例中:

第一个索引结果是一个 bool 数组,它选择 x 中大于 2 的元素。

第二个索引结果是一个 bool 数组,它选择 x 中第二列中能被 2 整除的元素。

所以,最终的结果是选中了 x 中的以下元素:

x[1, 0], x[1, 1], x[2, 0], x[2, 1]
x[0, 1], x[2, 1]
ellipsis 和 newaxis

还可以使用 ellipsis 和 newaxis 语法来简化高级索引的语法。

import numpy as np

x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[..., np.newaxis]
print(y)

输出:

[[[1]
  [2]]

 [[3]
  [4]]

 [[5]
  [6]]]

在上面的示例中,使用了 newaxis 语法来向数组 x 中的第三维插入新的维度。

此时的索引数组是 ellipsis,即省略号 ...,它表示选择剩下的维度。

所以,最终的结果是选中了 x 中的所有元素,并在其基础上插入了一个新维度。