Numpy库核心函数:数组处理与运算详解
NumPy是Python中用于科学计算的一个开源库。它提供了一种强大的多维数组对象,以及各种派生对象(如掩码数组和矩阵)。NumPy库中的核心函数涵盖了数组处理与运算、线性代数、傅里叶变换、随机数生成等许多方面。本文就主要介绍NumPy库的核心函数中关于数组处理与运算的部分。
1. 创建数组
在NumPy中,数组是三种主要数据类型之一(另外两种是列表和元组)。可以使用numpy.array函数来创建数组。以下是一些示例:
import numpy as np # 创建一个一维数组 arr1 = np.array([1, 2, 3, 4, 5]) # 创建一个二维数组 arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 创建一个全为0的三维数组 arr3 = np.zeros((3, 4, 5)) # 创建一个全为1的二维数组 arr4 = np.ones((2, 3)) # 创建一个随机的三维数组 arr5 = np.random.random((2, 4, 3))
2. 数组运算
NumPy数组支持各种运算,包括基本数学运算(如加、减、乘、除)、矩阵运算(如点积和叉积)和逻辑运算(如与、或、非运算)。
import numpy as np arr1 = np.array([1, 2, 3, 4, 5]) arr2 = np.array([6, 7, 8, 9, 10]) # 对数组进行基本运算 print(arr1 + arr2) # 输出 [ 7 9 11 13 15] print(arr1 - arr2) # 输出 [-5 -5 -5 -5 -5] print(arr1 * arr2) # 输出 [ 6 14 24 36 50] print(arr1 / arr2) # 输出 [0.16666667 0.28571429 0.375 0.44444444 0.5 ] arr3 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] arr4 = [[9, 8, 7], [6, 5, 4], [3, 2, 1]] # 对数组进行矩阵运算 print(np.dot(arr3, arr4)) # 输出 [[ 30 24 18] [ 84 69 54] [138 114 90]] # 对数组进行逻辑运算 arr5 = np.array([True, False, True]) arr6 = np.array([False, True, False]) print(np.logical_and(arr5, arr6)) # 输出 [False False False] print(np.logical_or(arr5, arr6)) # 输出 [ True True True] print(np.logical_not(arr5)) # 输出 [False True False]
3. 数组索引与切片
数组中的元素可以使用索引进行访问。与Python的列表一样,数组的索引从0开始,而且可以使用负数索引从末尾开始访问元素。
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr[0]) # 输出 1 print(arr[-1]) # 输出 5 arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr2[0, 0]) # 输出 1 print(arr2[1, 2]) # 输出 6
除了单个元素之外,还可以对数组进行切片,以获取某一段连续的元素。
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr[1:4]) # 输出 [2 3 4] print(arr[:3]) # 输出 [1 2 3] print(arr[2:]) # 输出 [3 4 5]
对于多维数组,也可以使用切片来获取某一部分数组。
import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr[:2, 1:]) # 输出 [[2 3] [5 6]]
4. 数组形状改变
在NumPy中,可以使用reshape方法来改变数组的形状。reshape方法的参数是一个表示新形状的元组。
import numpy as np arr1 = np.array([1, 2, 3, 4, 5, 6]) arr2 = arr1.reshape((2, 3)) print(arr1) # 输出 [1 2 3 4 5 6] print(arr2) # 输出 [[1 2 3] [4 5 6]] arr3 = np.array([[1, 2], [3, 4], [5, 6]]) arr4 = arr3.reshape((1, 6)) print(arr3) # 输出 [[1 2] [3 4] [5 6]] print(arr4) # 输出 [[1 2 3 4 5 6]]
除了reshape方法之外,还可以使用flatten方法将多维数组转化为一维数组。
import numpy as np arr1 = np.array([[1, 2], [3, 4], [5, 6]]) arr2 = arr1.flatten() print(arr1) # 输出 [[1 2] [3 4] [5 6]] print(arr2) # 输出 [1 2 3 4 5 6]
5. 数组合并与分割
在NumPy中,可以使用concatenate方法将两个或多个数组沿指定轴合并。 个参数是一个表示要合并的数组的元组,而第二个参数是一个表示要沿哪个轴进行合并的整数参数。
import numpy as np arr1 = np.array([[1, 2], [3, 4]]) arr2 = np.array([[5, 6], [7, 8]]) arr3 = np.concatenate((arr1, arr2), axis=0) arr4 = np.concatenate((arr1, arr2), axis=1) print(arr1) # 输出 [[1 2] [3 4]] print(arr2) # 输出 [[5 6] [7 8]] print(arr3) # 输出 [[1 2] [3 4] [5 6] [7 8]] print(arr4) # 输出 [[1 2 5 6] [3 4 7 8]]
与合并相反,分割将一个数组分成两个或多个小的数组。可以使用split方法来执行这个操作。split方法的 个参数是要分割的数组,而第二个参数是以哪个轴进行分割的整数参数。分割后的数组存储在一个列表中。
import numpy as np arr = np.array([1, 2, 3, 4, 5, 6]) arr1, arr2, arr3 = np.split(arr, [2, 4]) print(arr) # 输出 [1 2 3 4 5 6] print(arr1) # 输出 [1 2] print(arr2) # 输出 [3 4] print(arr3) # 输出 [5 6] arr4 = np.array([[1, 2], [3, 4], [5, 6]]) arr5, arr6 = np.split(arr4, [2]) print(arr4) # 输出 [[1 2] [3 4] [5 6]] print(arr5) # 输出 [[1 2] [3 4]] print(arr6) # 输出 [[5 6]]
以上就是NumPy库中的一些核心函数,包括创建数组、数组运算、数组索引与切片、数组形状改变、数组合
