📜  NumPy-索引和切片(1)

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

NumPy-索引和切片

NumPy是Python科学计算库中最重要的库之一。NumPy中提供了大量的数组操作函数,让数据处理更加高效。NumPy的数组对象是一个多维数组。

本文将深入介绍NumPy中如何使用索引和切片来访问和操作数组。

数组索引

数组元素的索引方式与Python列表和元组类似,但是数组可以是多维的。例如,要获取数组第二行第三个元素可以使用如下代码:

import numpy as np

a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(a[1, 2]) # 输出6
切片

与Python列表和元组一样,NumPy数组也可以使用切片来访问一部分数组元素。我们可以通过指定起点、终点和步长来访问数组的子集。例如,要获取数组第一行第二到第三个元素可以使用如下代码:

import numpy as np

a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(a[0, 1:3]) # 输出[2, 3]

使用:可以访问数组的全部元素,例如:

import numpy as np

a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(a[:, 1:3]) # 输出[[2, 3], [5, 6], [8, 9]]
布尔索引

NumPy还提供了一种叫做布尔索引的方法。布尔索引是一种使用布尔值来访问和操作数组的方法。具体来说,我们可以使用一个布尔数组来索引另一个数组。布尔数组的每个元素表示这个元素是否在结果数组中使用。例如,要获取数组中所有大于5的元素可以使用如下代码:

import numpy as np

a = np.array([[1,2,3], [4,5,6], [7,8,9]])
b = a > 5
print(b) # 输出[[False, False, False], [False, False, True], [True, True, True]]
print(a[a > 5]) # 输出[6, 7, 8, 9]

我们可以对数组进行操作,然后将结果保存到原数组或者新的数组中。例如,要将数组中所有小于5的元素设置为0可以使用如下代码:

import numpy as np

a = np.array([[1,2,3], [4,5,6], [7,8,9]])
a[a < 5] = 0
print(a) # 输出[[0, 0, 0], [0, 5, 6], [7, 8, 9]]
高级索引

NumPy提供了两种高级索引的方式:整数索引和花式索引。

整数索引

整数索引是指使用整数或者整数数组来访问数组的方式。例如,要获取数组中第2行和第3行可以使用如下代码:

import numpy as np

a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(a[[1,2]]) # 输出[[4, 5, 6], [7, 8, 9]]
花式索引

花式索引是指使用整数或者整数数组来访问或者操作数组的方式。可以使用一维和多维花式索引。

一个一维整数数组可以被用来当作另一个数组的整数索引。例如,下面的代码使用一个长度为3的一维数组来选择数组中的第2、4和5个元素:

import numpy as np

a = np.array([1, 2, 3, 4, 5])
b = [1, 3, 4]
print(a[b]) # 输出[2, 4, 5]

一个多维数组每个维度的整数数组可以被用来当作另一个数组的花式索引。例如,下面的代码使用两个长度为2的一维数组来选择数组中的副角和右下角:

import numpy as np

a = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
b = np.array([[0, 0], [2, 2]])
c = np.array([[0, 2], [0, 2]])
print(a[b, c]) # 输出[[0, 2], [6, 8]]
总结

NumPy的索引和切片功能极为强大,可以有效地对数组进行访问和操作,让数据处理更加高效。熟悉NumPy中的索引和切片,可以在科学计算和数据分析中发挥重要的作用。