一、numpy数组切片操作
numpy数组切片是指从原有的数组中截取出一个新的子数组,对子数组的修改不影响原数组。numpy通过冒号(:)来实现切片。切片的语法形式为:a[start:end:step]。其中start是切片的起始下标,end是切片的截止下标(不包含在切片内),step是切片的步长。如果不指定start,默认为0;如果不指定end,默认为数组的长度;如果不指定step,默认为1。
下面的例子演示了numpy数组的切片操作:
import numpy as np # 创建numpy数组 arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) # 切片操作 print(arr[1:5]) # [2 3 4 5] print(arr[:5]) # [1 2 3 4 5] print(arr[5:]) # [6 7 8 9] print(arr[::2]) # [1 3 5 7 9]
二、numpy数组指定列取
numpy可以通过冒号(:)来选择数组的某些列进行操作。语法形式为:a[:,start:end:step]。其中冒号(:)表示所有的行,start、end、step与切片操作相同。
下面的例子演示了如何指定列对numpy数组进行操作:
import numpy as np # 创建numpy数组 arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 指定列取 print(arr[:, 1]) # [2 5 8] print(arr[:, 1:3]) # [[2 3] [5 6] [8 9]] print(arr[:, ::2]) # [[1 3] [4 6] [7 9]]
三、numpy数组切片赋值
numpy数组切片不仅仅是获取数组的部分元素,还可以将新的值赋给这些元素,从而修改原有的数组。对于对子数组使用赋值操作,修改后的值会反映在原有的数组上。
下面的例子演示了如何通过numpy数组的切片操作,修改数组元素的值:
import numpy as np # 创建numpy数组 arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) # 切片赋值操作 arr[1:5] = 0 print(arr) # [1 0 0 0 0 6 7 8 9]
四、numpy数组、numpy数组切片与索引
numpy数组切片是指截取出一个新的数组,对新数组的操作不会影响原有的数组。而对于numpy数组切片后的数据,如果采用索引进行操作,修改后的值会反映在原数组上。
下面的例子演示了numpy数组、numpy数组切片与索引的关系:
import numpy as np # 创建numpy数组 arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) arr_slice = arr[1:5] print(arr) # [1 2 3 4 5 6 7 8 9] print(arr_slice) # [2 3 4 5] # numpy数组切片后使用索引修改值 arr_slice[1] = 0 print(arr_slice) # [2 0 4 5] print(arr) # [1 2 0 4 5 6 7 8 9]
五、numpy数组切片还是数组还是列表
numpy数组切片得到的是一个新的数组,而不是列表。即使原有的数组是列表,通过切片操作得到的依然是一个数组。
下面的例子演示了numpy数组切片得到的是一个数组:
import numpy as np # 创建列表 lst = [1, 2, 3, 4, 5] # 通过列表创建numpy数组 arr = np.array(lst) # 切片操作 arr_slice = arr[1:3] print(type(arr_slice)) #
六、numpy数组切片返回数组的引用对吗
numpy数组切片操作返回的是一个新的数组,而不是原有数组的引用。也就是说,对新的数组进行操作,不会影响到原有的数组。
下面的例子演示了numpy数组切片返回的是一个新的数组:
import numpy as np # 创建numpy数组 arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) # 切片操作 arr_slice = arr[1:5] print(arr_slice) # [2 3 4 5] # 修改切片 arr_slice[1] = 0 print(arr_slice) # [2 0 4 5] # 原数组没有改变 print(arr) # [1 2 3 4 5 6 7 8 9]
七、numpy数组排序
numpy中有许多排序算法可以对数组进行排序,其中最常用的算法是快排。
下面的例子演示了numpy数组的排序操作:
import numpy as np # 创建numpy数组 arr = np.array([4, 2, 6, 8, 1, 5, 3, 7, 9]) # 排序操作 print(np.sort(arr)) # [1 2 3 4 5 6 7 8 9]
八、numpy二维数组切片
对于二维数组,numpy的切片操作除了在行方向上进行截取操作外,还可以在列方向上进行操作。同时,可以通过冒号(:)对行和列同时进行操作。
下面的例子演示了numpy二维数组的切片操作:
import numpy as np # 创建numpy数组 arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 二维数组切片 print(arr[1:3, 1:3]) # [[5 6] [8 9]] print(arr[1:3, ::2]) # [[4 6] [7 9]] print(arr[:, 1:3]) # [[2 3] [5 6] [8 9]]
九、python二维数组切片规则选取
在对二维数组进行切片操作时,可以在行方向和列方向上分别进行选择。对于规则选取,程序员需要根据具体的需求进行选择。
下面的例子演示了对python二维数组进行切片操作所需要的规则选取:
# 创建python二维数组 arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # python二维数组切片操作 print(arr[1:]) # [[4, 5, 6], [7, 8, 9]] print(arr[:2]) # [[1, 2, 3], [4, 5, 6]] print(arr[:2, 1:]) # [[2, 3], [5, 6]]
结束语
本文详细讲解了numpy数组的切片操作,包括numpy数组切片操作、numpy数组指定列取、numpy数组切片赋值、numpy数组、numpy数组切片与索引、numpy数组切片还是数组还是列表、numpy数组切片返回数组的引用对吗、numpy数组排序和numpy二维数组切片等。通过本文的学习,读者可以熟练掌握numpy数组的切片操作,在numpy编程中可以更加得心应手。