ndarray
对象的内容可以通过索引或切片来访问和修改,就像 Python 的内置容器对象一样。
如前所述,ndarray
对象中的元素遵循基于零的索引。 有三种可用的索引方法类型: 字段访问,基本切片和高级索引。
基本切片是 Python 中基本切片概念到 n 维的扩展。 通过将start
,stop
和step
参数提供给内置的slice
函数来构造一个 Python slice
对象。 此slice
对象被传递给数组来提取数组的一部分。
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
。
通过将由冒号分隔的切片参数(start:stop:step
)直接提供给ndarray
对象,也可以获得相同的结果。
import numpy as np a = np.arange(10) b = a[2:7:2] print b
输出如下:
[2 4 6]
如果只输入一个参数,则将返回与索引对应的单个项目。 如果使用a:
,则从该索引向后的所有项目将被提取。 如果使用两个参数(以:
分隔),则对两个索引(不包括停止索引)之间的元素以默认步骤进行切片。
# 对单个元素进行切片 import numpy as np a = np.arange(10) b = a[5] print b
输出如下:
5
# 对始于索引的元素进行切片 import numpy as np a = np.arange(10) print a[2:]
输出如下:
[2 3 4 5 6 7 8 9]
# 对索引之间的元素进行切片 import numpy as np a = np.arange(10) print a[2:5]
输出如下:
[2 3 4]
上面的描述也可用于多维ndarray
。
import numpy as np a = np.array([[1,2,3],[3,4,5],[4,5,6]]) print a # 对始于索引的元素进行切片 print '现在我们从索引 a[1:] 开始对数组切片' print a[1:]
输出如下:
[[1 2 3] [3 4 5] [4 5 6]] 现在我们从索引 a[1:] 开始对数组切片 [[3 4 5] [4 5 6]]
切片还可以包括省略号(...
),来使选择元组的长度与数组的维度相同。 如果在行位置使用省略号,它将返回包含行中元素的ndarray
。
# 最开始的数组 import numpy as np a = np.array([[1,2,3],[3,4,5],[4,5,6]]) print '我们的数组是:' print a print '\n' # 这会返回第二列元素的数组: print '第二列的元素是:' print a[...,1] print '\n' # 现在我们从第二行切片所有元素: print '第二行的元素是:' print a[1,...] print '\n' # 现在我们从第二列向后切片所有元素: print '第二列及其剩余元素是:' print a[...,1:]
输出如下:
我们的数组是: [[1 2 3] [3 4 5] [4 5 6]] 第二列的元素是: [2 4 5] 第二行的元素是: [3 4 5] 第二列及其剩余元素是: [[2 3] [4 5] [5 6]]