📅  最后修改于: 2023-12-03 15:03:19.359000             🧑  作者: Mango
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 语法来简化高级索引的语法。
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 中的所有元素,并在其基础上插入了一个新维度。