NumPy - 索引和切片

ndarray 对象的内容可以通过索引或切片来访问和修改,就像 Python 内置的容器对象一样。

如前所述,ndarray 对象中的项目遵循从零开始的索引。 三种索引方式可供选择 − 字段访问、基本切片高级索引

基本切片是 Python 切片到 n 维的基本概念的扩展。 Python slice 切片对象是通过为内置的 slice 函数提供 start、stopstep 参数来构造的。 这个切片对象被传递给数组以提取数组的一部分。


示例 1

import numpy as np 
a = np.arange(10) 
s = slice(2,7,2) 
print a[s]

它的输出结果如下 −

[2  4  6]

在上面的例子中,一个ndarray对象是由arange()函数准备的。 然后定义一个切片对象,开始、停止和步长值分别为 2、7 和 2。 当这个切片对象被传递给 ndarray 时,它的一部分从索引 2 开始到 7,步长为 2 被切片。

将以冒号分隔的切片参数直接赋给ndarray对象也可以获得同样的结果。


示例 2

import numpy as np 
a = np.arange(10) 
b = a[2:7:2] 
print b

这里,我们将得到相同的输出 −

[2  4  6]

如果只传入一个参数,则返回索引对应的单个项。 如果在其前面插入 : ,则将提取该索引之后的所有项目。 如果使用两个参数(在它们之间带有 : ),则默认第一步的两个索引(不包括停止索引)之间的项目被切片。


示例 3

# slice single item 
import numpy as np 

a = np.arange(10) 
b = a[5] 
print b

它的输出结果如下 −

5

示例 4

# slice items starting from index 
import numpy as np 
a = np.arange(10) 
print a[2:]

Now, the output would be −

[2  3  4  5  6  7  8  9]

示例 5

# slice items between indexes 
import numpy as np 
a = np.arange(10) 
print a[2:5]

Here, the output would be −

[2  3  4] 

以上描述也适用于多维 ndarray


示例 6

import numpy as np 
a = np.array([[1,2,3],[3,4,5],[4,5,6]]) 
print a  

# slice items starting from index
print 'Now we will slice the array from the index a[1:]' 
print a[1:]

输出结果如下 −

[[1 2 3]
 [3 4 5]
 [4 5 6]]

Now we will slice the array from the index a[1:]
[[3 4 5]
 [4 5 6]]

切片还可以包括省略号 (...) 以创建与数组维度长度相同的选择元组。 如果在行位置使用省略号,它将返回一个由行中的项目组成的 ndarray。


示例 7

# array to begin with 
import numpy as np 
a = np.array([[1,2,3],[3,4,5],[4,5,6]]) 

print 'Our array is:' 
print a 
print '\n'  

# this returns array of items in the second column 
print 'The items in the second column are:'  
print a[...,1] 
print '\n'  

# Now we will slice all items from the second row 
print 'The items in the second row are:' 
print a[1,...] 
print '\n'  

# Now we will slice all items from column 1 onwards 
print 'The items column 1 onwards are:' 
print a[...,1:]

这个程序的输出如下 −

Our array is:
[[1 2 3]
 [3 4 5]
 [4 5 6]] 
 
The items in the second column are: 
[2 4 5] 

The items in the second row are:
[3 4 5]

The items column 1 onwards are:
[[2 3]
 [4 5]
 [5 6]]