1、切片
1)numpy中数组切片与原生python切片的不同点
数组切片返回的是原始数组的视图,原生python切片返回的是原始数组的浅拷贝。
操作如下:
list1 = [1,2,3] display(list1) list2 = list1[1:] display(list2) # 此时,修改list2中某一个元素,查看原始列表的元素是否发生变化? list2[0] = 666 display(list2) display(list1) array1 = np.array([1,3,5,2,4]) display(array1) array2 = array1[2:] display(array2) # 此时,修改array2中某一个元素,查看原始数组的元素是否发生变化? array2[0] = 888 display(array2) display(array1)
结果如下:
① 使用数组对象的copy方法,实现底层数据的复制,而不是返回底层数据的视图;
array3 = np.array([1,2,3,4,5,6]) display(array3) array4 = array3.copy() display(array4) array4[2] = 666 display(array4) display(array3)
结果如下:
2)numpy中切片的使用
① 使用切片需要注意的知识点
② 一张图帮你理解数组切片
③ 常用切片操作如下
a = np.arange(10) display(a) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) print(a[:3]) # 0 1 2 print(a[3:6]) # 3 4 5 print(a[6:]) # 6 7 8 9 print(a[::]) # 0 1 2 3 4 5 6 7 8 9 print(a[:]) # 0 1 2 3 4 5 6 7 8 9 print(a[::3]) # 0 3 6 9 print(a[1::3]) # 1 4 7 print(a[2::3]) # 2 5 8 # 当start、stop、step为负数的时候,理解起来就稍微难一点; print(a[::-1]) # 9 8 7 6 5 4 3 2 1 0 print(a[:-4:-1]) # 9 8 7 print(a[-4:-7:-1]) # 6 5 4 print(a[-7::-1]) # 3 2 1 0
结果如下:
④ 当你理解了那幅图,可以做一下如下几道题目,检验一下自己;
a = np.arange(10) display(a) print(a[-8:-2:1]) print(a[7:1:-1])
注意:上述两个切片是否存在问题,假如不存在,结果又是什么?如果你能回答正确这两个问题,python切片,就没有问题了。
3)当数组是多维数组时,可以使用array[高维, 低维]的方式,按维度进行索引或切片。
如果中括号[]中只写了一个维度的时候,就代表最高维;
对每一个维度,都可以使用上述的切片功能;
① 直接举例说明
b = np.arange(20).reshape(4,5) display(b) display(b[2,3]) display(b[1]) display(b[-1]) # ----------------------------------------------- display(b[1:3,2:4]) display(b[2,1:4]) display(b[0:3,1]) # ----------------------------------------------- display(b[1:3,:]) display(b[:,1]) display(b[::])
结果如下:





