可以使用标准的python x [obj]语法对ndarray进行索引,其中x是数组,而obj是选择。
共有三种索引可用-
现场访问
基本切片
高级索引
什么样的索引将取决于obj。在本节中,我们将主要集中于基本切片和高级索引。
我们可以将高级索引分为两部分-
整数数组索引
布尔索引
Python的基本切片概念在基本切片中扩展为n个维度。与python slice对象一样,该对象通过为slice函数提供start,stop和step参数来构造。为了获得特定的输出,将slice对象传递到数组以提取数组的一部分。
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])