NumPy索引和切片


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

如前所述,ndarray对象中的项遵循从零开始的索引。有三种索引方法可用 - 字段访问,基本切片高级索引

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

例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定义切片对象。当这个slice对象被传递给ndarray时,它的一部分以索引2开始,最多为7,步长为2。

通过直接向 冒号 对象提供由冒号分隔的切片参数((start:stop:step)),也可以获得相同的结果。

例2

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

在这里,我们会得到相同的输出 -

[2  4  6]

如果只放入一个参数,则会返回与该索引对应的单个项目。如果将a:插入其前面,则将从该索引开始提取所有项目。如果使用两个参数(在它们之间),则将使用默认步骤1对两个索引(不包括停止索引)之间的项目进行切片。

例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:]

现在,输出将是 -

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

在这里,输出将是 -

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