NumPy 库的基本运用
NumPy 库基本运用指南:从入门到实践
在数据科学、机器学习和科学计算的领域中,NumPy 库无疑是一个不可或缺的工具。它为 Python 提供了高效的多维数组操作能力,以及丰富的数学函数库,让数据处理变得更加便捷和高效。今天,我们就来一起探索 NumPy 库的基本运用。
安装 NumPy
在开始使用 NumPy 之前,我们需要先安装它。如果你使用的是 pip 包管理器,只需在命令行中输入以下命令:
pip install numpy
等待安装完成后,我们就可以在 Python 代码中导入 NumPy 库了,通常我们会给它取一个别名 np,方便后续使用:
import numpy as np
NumPy 数组的创建
NumPy 的核心是数组(ndarray),它是一个多维的数组对象。与 Python 内置的列表相比,NumPy 数组具有更高的运算效率和更丰富的操作方法。
从列表创建数组
我们可以通过np.array()函数将 Python 列表转换为 NumPy 数组。例如:
# 创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1) # 输出:[1 2 3 4 5]
# 创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2)
# 输出:
# [[1 2 3]
# [4 5 6]]
利用函数创建特殊数组
除了从列表创建,NumPy 还提供了一些函数来创建具有特定规律的数组。
np.zeros():创建全为 0 的数组。
zeros_arr = np.zeros((2, 3)) # 创建一个2行3列的全0数组print(zeros_arr)
# 输出:
# [[0. 0. 0.]
# [0. 0. 0.]]
np.ones():创建全为 1 的数组。
ones_arr = np.ones((3, 2)) # 创建一个3行2列的全1数组
print(ones_arr)
# 输出:
# [[1. 1.]
# [1. 1.]
# [1. 1.]]
np.arange():类似于 Python 的 range 函数,创建一个等差数组。
arange_arr = np.arange(1, 10, 2) # 从1开始,到10结束(不包含10),步长为2print(arange_arr) # 输出:[1 3 5 7 9]
np.linspace():创建一个在指定范围内均匀分布的数组。
linspace_arr = np.linspace(0, 1, 5) # 从0到1,生成5个均匀分布的数
print(linspace_arr) # 输出:[0. 0.25 0.5 0.75 1. ]
数组的属性
了解数组的属性有助于我们更好地操作数组,NumPy 数组有一些常用的属性:
ndim:返回数组的维度。
print(arr1.ndim) # 输出:1(一维数组)
print(arr2.ndim) # 输出:2(二维数组)
shape:返回一个元组,表示数组各维度的大小。
print(arr1.shape) # 输出:(5,)(一维数组有5个元素)
print(arr2.shape) # 输出:(2, 3)(二维数组有2行3列)
size:返回数组中元素的总个数。
print(arr1.size) # 输出:5
print(arr2.size) # 输出:6
dtype:返回数组中元素的数据类型。
print(arr1.dtype) # 输出:int64(默认整数类型)
数组的索引和切片
与 Python 列表类似,NumPy 数组也支持索引和切片操作,通过这些操作我们可以获取数组中的特定元素或子数组。
一维数组的索引和切片
对于一维数组,索引和切片的使用方法与列表基本相同:
arr = np.arange(10)
print(arr[3]) # 输出:3(获取索引为3的元素)
print(arr[2:5]) # 输出:[2 3 4](获取从索引2到4的元素,不包含5)
print(arr[:6]) # 输出:[0 1 2 3 4 5](获取从开头到索引5的元素)
print(arr[4:]) # 输出:[4 5 6 7 8 9](获取从索引4到结尾的元素)
print(arr[::2]) # 输出:[0 2 4 6 8](步长为2,获取元素)
二维数组的索引和切片
二维数组的索引和切片相对复杂一些,需要指定行和列的索引:
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr[1, 2]) # 输出:6(获取第2行第3列的元素,行和列索引均从0开始)
print(arr[0:2, 1:3]) # 输出:[[2 3] [5 6]](获取第1-2行,第2-3列的子数组)
print(arr[:, 1]) # 输出:[2 5 8](获取所有行的第2列元素)print(arr[1, :]) # 输出:[4 5 6](获取第2行的所有元素)
数组的基本运算
NumPy 数组支持各种算术运算,这些运算都是对数组中的元素逐个进行的,大大提高了运算效率。
元素级运算
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([5, 6, 7, 8])
# 加法
print(arr1 + arr2) # 输出:[ 6 8 10 12]
# 减法
print(arr1 - arr2) # 输出:[-4 -4 -4 -4]
# 乘法
print(arr1 * arr2) # 输出:[ 5 12 21 32]# 除法
print(arr1 / arr2) # 输出:[0.2 0.33333333 0.42857143 0.5]
# 平方
print(arr1 **2) # 输出:[ 1 4 9 16]
与标量的运算
数组还可以与标量进行运算,运算结果是数组中的每个元素都与该标量进行运算:
arr = np.array([1, 2, 3, 4])
print(arr + 2) # 输出:[3 4 5 6]
print(arr * 3) # 输出:[ 3 6 9 12]
print(arr / 2) # 输出:[0.5 1. 1.5 2. ]
矩阵乘法
如果需要进行矩阵乘法(不是元素级乘法),可以使用np.dot()函数或@运算符:
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
# 使用np.dot()函数
print(np.dot(arr1, arr2))
# 输出:
# [[19 22]
# [43 50]]
# 使用@运算符
print(arr1 @ arr2)
# 输出:
# [[19 22]
# [43 50]]
常用的统计函数
NumPy 提供了许多实用的统计函数,用于对数组进行统计分析。
np.mean():计算数组的平均值。
arr = np.array([1, 2, 3, 4, 5])
print(np.mean(arr)) # 输出:3.0
np.sum():计算数组元素的总和。
arr = np.array([1, 2, 3, 4, 5])
print(np.sum(arr)) # 输出:15
np.max():找出数组中的最大值。
arr = np.array([1, 5, 3, 8, 2])
print(np.max(arr)) # 输出:8
np.min():找出数组中的最小值。
arr = np.array([1, 5, 3, 8, 2])
print(np.min(arr)) # 输出:1
np.std():计算数组的标准差。
arr = np.array([1, 2, 3, 4, 5])
print(np.std(arr)) # 输出:1.4142135623730951
np.var():计算数组的方差。
arr = np.array([1, 2, 3, 4, 5])
print(np.var(arr)) # 输出:2.0
以上就是 NumPy 库的一些基本运用,掌握这些内容可以帮助我们完成很多常见的数据处理任务。当然,NumPy 的功能远不止这些,还有更多高级的特性和函数等待我们去探索。