Numpy 中多维数组的切片操作与 python 中 list 的切片操作一样,同样由 start, stop, step 三个部分组成
import numpy as np arr = np.arange(12) print 'array is:', arr slice_one = arr[:4] print 'slice begins at 0 and ends at 4 is:', slice_one slice_two = arr[7:10] print 'slice begins at 7 and ends at 10 is:', slice_two slice_three = arr[0:12:4] print 'slice begins at 0 and ends at 12 with step 4 is:', slice_three array is: [ 0 1 2 3 4 5 6 7 8 9 10 11] slice begins at 0 and ends at 4 is: [0 1 2 3] slice begins at 7 and ends at 10 is: [7 8 9] slice begins at 0 and ends at 12 with step 4 is: [0 4 8]上述例子是一维数组的例子,如果是多维数组,将不同维度上的切片操作用 逗号 分开就好了
# coding: utf-8 import numpy as np arr = np.arange(12).reshape((3, 4)) print 'array is:' print arr # 取第一维的索引 1 到索引 2 之间的元素,也就是第二行 # 取第二维的索引 1 到索引 3 之间的元素,也就是第二列和第三列 slice_one = arr[1:2, 1:3] print 'first slice is:' print slice_one # 取第一维的全部 # 按步长为 2 取第二维的索引 0 到末尾 之间的元素,也就是第一列和第三列 slice_two = arr[:, ::2] print 'second slice is:' print slice_two array is: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] first slice is: [[5 6]] second slice is: [[ 0 2] [ 4 6] [ 8 10]]对于 slice_two,如果 arr 是用 Python 的 list 表示的,那么要得到相同的结果得像下面这样,相对来说就麻烦多了:
import numpy as np arr = np.arange(12).reshape((3, 4)).tolist() slice_two = [ row[::2] for row in arr ] print slice_two [[0, 2], [4, 6], [8, 10]]对于维数超过 3 的多维数组,还可以通过 '…' 来简化操作
# coding: utf-8 import numpy as np arr = np.arange(24).reshape((2, 3, 4)) print arr[1, ...] # 等价于 arr[1, :, :] print arr[..., 1] # 等价于 arr[:, :, 1] [[12 13 14 15] [16 17 18 19] [20 21 22 23]] [[ 1 5 9] [13 17 21]]