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])

更新于:2019年7月30日

578 次浏览

启动您的职业生涯

完成课程后获得认证

开始学习
广告