NumPy 高级索引

在 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, 68


示例: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 中选择索引为 02 的行。

注意:要了解更多关于 N 维数组索引的信息,请访问 NumPy 数组索引

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战