NumPy Python中的基本切片和高级索引

可以使用标准的python x [obj]语法对ndarray进行索引,其中x是数组,而obj是选择。

共有三种索引可用-

  • 现场访问

  • 基本切片

  • 高级索引

什么样的索引将取决于obj。在本节中,我们将主要集中于基本切片和高级索引。

我们可以将高级索引分为两部分-

  • 整数数组索引

  • 布尔索引

基本切片

Python的基本切片概念在基本切片中扩展为n个维度。与python slice对象一样,该对象通过为slice函数提供start,stop和step参数来构造。为了获得特定的输出,将slice对象传递到数组以提取数组的一部分。

例子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)。然后,通过为其分配开始,停止和步长值来创建切片对象。当我们将切片对象传递给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])