NumPy Python基础切片和高级索引
ndarray 的索引可以使用标准 Python x[obj] 语法完成,其中 x 是数组,obj 是选择。
有三种索引方式:
- 字段访问
- 基本切片
- 高级索引
使用哪种索引取决于 obj。在本节中,我们将主要关注基本切片和高级索引。
我们可以将高级索引分为两部分:
- 整数数组索引
- 布尔索引
基本切片
Python 的基本切片概念扩展到 n 维。与 Python 切片对象一样,它是通过向切片函数提供起始、结束和步长参数来构造的。为了获得特定的输出,将切片对象传递给数组以提取数组的一部分。
示例 1
import numpy as np arr = np.arange(25) s = slice(2, 21, 4) print (arr[s])
输出
[ 2 6 10 14 18]
在上面的例子中,我们首先使用 arange() 函数创建了一个 ndarray 对象 (arr)。然后通过为其赋值起始、结束和步长值来创建一个切片对象 (s)。当我们将切片对象传递给 ndarray 时,我们得到数组的一部分(切片),从索引 2 开始,到 21 结束,步长为 4。
另一种编写上述程序的方法:
# Another way to write above program import numpy as np arr = np.arange(25) s = arr[2:21:4] print (s)
输出
[ 2 6 10 14 18]
切片单个项目
#Slice single item from an array import numpy as np arr = np.arange(10) s = arr[9] print(s)
输出
9
从索引开始切片项目
#slice item starting from index import numpy as np arr = np.arange(10) s = arr[3:] print(s)
输出
[3 4 5 6 7 8 9]
切片索引之间的项目
#slice item between indexes import numpy as np arr = np.arange(10) s = arr[3: 7] print(s)
输出
[3 4 5 6]
上述两种方法也适用于多维 ndarray,如下所示:
#slice item between indexes import numpy as np arr = np.array([[[1],[2],[3]], [[4],[5],[6]], [[7], [8], [9]]]) s = arr[1:] print(s)
输出
[[[4] [5] [6]] [[7] [8] [9]]]
高级索引
整数数组索引
让我们创建一个包含整数的简单数组
arr=np.array([[1,2],[3,4],[5,6]]) print(arr)
输出
[[1 2] [3 4] [5 6]]
让我们尝试从数组中选择特定元素,例如从多维 ndarray 中选择行索引为 [0, 1, 2] 和列索引为 [1, 0, 1] 的元素。
import numpy as np arr=np.array([[1,2],[3,4],[5,6]]) s = arr[[0, 1, 2],[1, 0, 1]] print(s)
输出
[2 3 6]
使用 0 索引将为您提供第一行:
>>> arr=np.array([[1,2],[3,4],[5,6]]) >>> print(arr[0]) [1 2]
类似地,我们可以从数组中选择单个项目,例如 - 选择 1 作为行索引和 1 作为列索引的元素,这将给出数组值为 4。
>>> print(arr[[1], [1]]) [4]
我们可以进行加法等算术运算,并在执行加法后返回特定索引的值。
>>> print(arr[[1], [1]]+ 1) [5]
我们可以看到索引值增加了 1,但实际数组保持不变。
>>> arr array([[1, 2], [3, 4], [5, 6]])
但是我们可以更改数组的值并返回数组的新副本。
>>> arr[[1], [1]] +=1 >>> arr array([[1, 2], [3, 5], [5, 6]])
布尔索引
当结果将是布尔运算的结果时,我们使用布尔索引。
>>> arr=np.array([[0,1,2], [3,4,5], [6,7,8], [9,10,11]]) >>> arr array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]])
返回值为 1 的值。
>>> arr[arr == 1] array([1])
返回偶数值。
>>> arr[arr %2 == 0] array([ 0, 2, 4, 6, 8, 10])
广告