在 NumPy 中,索引(fancy indexing)允许我们使用索引数组一次性访问多个数组元素。
索引(fancy indexing)可以执行更高级、更高效的数组操作,包括条件过滤、排序等。
使用 NumPy 索引(fancy indexing)选择多个元素
import numpy as np
# create a numpy array
array1 = np.array([1, 2, 3, 4, 5, 6, 7, 8])
# select elements at index 1, 2, 5, 7
select_elements = array1[[1, 2, 5, 7]]
print(select_elements)
# Output: [2 3 6 8]
在此示例中,结果数组 select_elements 包含 array1 中与索引 [1, 2, 5, 7]
对应的元素,这些元素分别是 2, 3, 6 和 8。
示例:NumPy 索引(fancy indexing)
import numpy as np
array1 = np.array([1, 2, 3, 4, 5, 6, 7, 8])
# select a single element
simple_indexing = array1[3]
print("Simple Indexing:",simple_indexing) # 4
# select multiple elements
fancy_indexing = array1[[1, 2, 5, 7]]
print("Fancy Indexing:",fancy_indexing) # [2 3 6 8]
输出
Simple Indexing: 4 Fancy Indexing: [2 3 6 8]
注意:要了解更多关于简单的 NumPy 数组索引的信息,请访问 NumPy 数组索引。
用于排序 NumPy 数组的索引(fancy indexing)
索引(fancy indexing)也可以对 NumPy 数组进行排序。让我们看一个示例。
import numpy as np
array1 = np.array([3, 2, 6, 1, 8, 5, 7, 4])
# sort array1 using fancy indexing
sorted_array = array1[np.argsort(array1)]
print(sorted_array)
# Output: [1, 2, 3, 4, 5, 6, 7, 8]
在这里,我们使用索引(fancy indexing)和 argsort()
函数以升序对 array1 进行排序。
我们也可以使用索引(fancy indexing)以降序对数组进行排序。
import numpy as np
array1 = np.array([3, 2, 6, 1, 8, 5, 7, 4])
# sort array1 using fancy indexing in descending order
sorted_array = array1[np.argsort(-array1)]
print(sorted_array)
# Output: [8 7 6 5 4 3 2 1]
在这里,我们首先将 array1 乘以 -1 以降序排序,然后使用索引(fancy indexing)返回排序后的数组。
使用索引(fancy indexing)为特定元素分配新值
我们还可以使用索引(fancy indexing)为 NumPy 数组的特定元素分配新值。例如,
import numpy as np
array1 = np.array([3, 2, 6, 1, 8, 5, 7, 4])
# create a list of indices to assign new values
indices = [1, 3, 6]
# create a new array of values to assign
new_values = [10, 20, 30]
# use fancy indexing to assign new values to specific elements
array1[indices] = new_values
print(array1)
# Output: [ 3 10 6 20 8 5 30 4]
在此示例中,我们首先创建了一个名为 indices 的索引列表,该列表指定了我们要为其分配新值的 array1 中的元素。
然后,我们创建了一个名为 new_values 的新值数组,用于分配给指定的索引。
最后,我们使用索引列表和索引(fancy indexing)将新值分配给 array1 的指定元素。
N 维数组的索引(fancy indexing)
我们也可以在多维数组上使用索引(fancy indexing)。
让我们看一个使用索引(fancy indexing)选择特定行的示例。
import numpy as np
# create a 2D array
array1 = np.array([[1, 3, 5],
[11, 7, 9],
[13, 18, 29]])
# create an array of row indices
row_indices = np.array([0, 2])
# use fancy indexing to select specific rows
selected_rows = array1[row_indices, :]
print(selected_rows)
输出
[[ 1 3 5] [13 18 29]]
在这里,我们创建了一个名为 array1 的二维数组和一个名为 row_indices 的行索引数组。
然后,我们使用索引(fancy indexing)从 array1 中选择索引为 0 和 2 的行。
注意:要了解更多关于 N 维数组索引的信息,请访问 NumPy 数组索引。