“”"" (1)基本的切片和索引 注意:当你将一个标量值赋值给一个切片时(如arr[5:8]=12),该值会自动传播到整个选区。 “”" import numpy as np arr = np.arange(7) print(arr) print(arr[5]) print(arr[1:3]) print(arr[1:]) print(arr[:3]) arr[0:2] = 13 # 在指定位置新增数据,原有数组往后移位 print(arr)
arr1 = [0,1,2,3,4,5,6] print(arr1) arr1[0:3] = [“a”] # 列表中arr[0:3]位置的内容,被替换成"a" print(arr1) print("-“30) “”" (2)多维数组的索引 在多维数组中,如果省略了后面的索引,则返回对象会是一个维度低一点的ndarray 如:在一个二维数组中,各索引位置上的元素不再是标量而是一维数组: “”" arr2 = np.array([[1,2,3],[4,5,6],[7,8,9]]) print(arr2) print(arr2[1]) # [4 5 6] print(arr2[0][2]) # 3,取单个元素,第0行,第3列的元素 print(arr2[0,2]) # 3,取单个元素,第0行,第3列的元素 print("”*30) “”" (3)视图还是复制 视图:跟列表最重要的区别在于,数组切片是原始数组的视图。 这意味着数据不会被复制,修改切片,变动也会体现在原始数组arr中。 由于NumPy的设计目的是处理大数据,所以你可以想象一下, 假如NumPy坚持要将数据复制来复制去的话会产生何等的性能和内存问题。 “”" arr3 = np.arange(10) print(arr3) slice = arr3[0:3] print(slice) slice[:] = 99 # 数组中,arr3[0:3]的内容分别被替换成 99,99,99 print(arr3) “”" 复制:如果你想要得到的是ndarray切片的一份副本而非视图, 就需要明确地进行复制操作,copy()方法 “”" arr4 = np.arange(12).reshape(3,4) print(arr4) myarr4 = arr4.copy() print(myarr4) print(id(arr4),id(myarr4))