您的位置:

numpy数组切片全解析

一、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编程中可以更加得心应手。