📜  Python中NumPy的基本切片Slicing和高级索引Indexing(1)

📅  最后修改于: 2023-12-03 15:19:23.024000             🧑  作者: Mango

Python中NumPy的基本切片Slicing和高级索引Indexing

NumPy是Python中重要的数值计算库,提供了丰富的数组和矩阵运算功能。本文介绍NumPy中的基本切片Slicing和高级索引Indexing。

基本切片
一维数组

NumPy中一维数组的切片和Python中列表类似,使用[start:end:step]的方式:

import numpy as np

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(a[2:5])  # [2 3 4]
print(a[:4])  # [0 1 2 3]
print(a[6:])  # [6 7 8 9]
print(a[::2])  # [0 2 4 6 8]
多维数组

对于多维数组,可以使用逗号隔开的切片参数:

import numpy as np

a = np.array([[0, 1, 2, 3],
              [4, 5, 6, 7],
              [8, 9, 10, 11]])
print(a[1:3, 1:3])  # [[5 6] [9 10]]
print(a[:, 2])  # [2 6 10]
print(a[1:, 1::2])  # [[5 7] [9 11]]

其中,a[1:3, 1:3]表示选取第2到第3行和第2到第3列的元素,a[:, 2]表示选取所有行的第3列元素,a[1:, 1::2]表示选取第2行及以后的所有行,第2列及以后的每隔一列的元素。

高级索引

NumPy中提供多种高级索引方法,包括整数数组索引、布尔索引和花式索引。

整数数组索引

整数数组索引可以通过一个整数数组来选取数组的元素:

import numpy as np

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
idx = np.array([0, 2, 4])
print(a[idx])  # [0 2 4]
布尔索引

布尔索引可以通过一个布尔数组来选取数组的元素:

import numpy as np

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
mask = np.array([True, False, True, False, True, False, True, False, True, False])
print(a[mask])  # [0 2 4 6 8]
花式索引

花式索引是通过一个整数数组或布尔数组来选取数组的元素,它可以同时使用多个整数数组或布尔数组:

import numpy as np

a = np.array([[0, 1], [2, 3], [4, 5]])
print(a[[0, 1], [0, 1]])  # [0 3]
print(a[[0, 2], 1])  # [1 5]
mask = np.array([True, False, True])
print(a[mask])  # [[0 1] [4 5]]

其中,a[[0, 1], [0, 1]]表示选择第1和第2行,第1和第2列的表格交点,a[[0, 2], 1]表示选择第1行和第3行,第2列的元素,a[mask]表示选择mask为True的行。

总结

本文介绍了Python中NumPy的基本切片Slicing和高级索引Indexing,包括一维数组和多维数组的切片方法,以及整数数组索引、布尔索引和花式索引。这些操作可以帮助程序员高效地操作数组,实现各种数值计算任务。