# coding: utf-8
import numpy as np
# arr = np.arange(24).reshape((2, 3, 4))
# print(arr)
# arr=[[[ 0 1 2]
# [ 3 4 5]]
#
# [[ 6 7 8]
# [ 9 10 11]]]
# print(arr[1, ...]) # 等价于 arr[1, :, :]
# arr[1, ...]= [[ 6 7 8]
# [ 9 10 11]]
# print(arr[..., 1]) # 等价于 arr[:, :, 1]
# arr[..., 1]=[[ 1 4]
# [ 7 10]]
arr = np.arange(12).reshape((2, 2, 3))
print(arr)
# arr=[[[ 0 1 2]
# [ 3 4 5]]
#
# [[ 6 7 8]
# [ 9 10 11]]]
print(arr[1, ...]) # 等价于 arr[1, :, :]
# arr[1, ...]=[[ 6 7 8]
# [ 9 10 11]]
print(arr[..., 1]) # 等价于 arr[:, :, 1]
# arr[..., 1]=[[ 1 4]
# [ 7 10]]
切片(slicing)操作
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]]