NumPy 数值计算基础课程
介绍
如果你使用 Python 语言进行科学计算,那么一定会接触到 NumPy。NumPy 是支持 Python 语言的数值计算扩充库,其拥有强大的多维数组处理与矩阵运算能力。除此之外,NumPy 还内建了大量的函数,方便你快速构建数学模型。
NumPy 的英文全称为 Numerical Python,意味着它是 Python 面向数值计算的第三方库。NumPy 的特点在于,扩展了 Python 内建的数组类型,支持更高维度的数组和矩阵运算,以及更丰富的数学函数。
NumPy 是 Scipy.org 中最重要的库之一,它也被 Pandas、Matplotlib 等其他常见的第三方库作为核心计算库。当你单独安装这些库时,你会发现它们同时会安装 NumPy 作为依赖。
课程知识点
-
数值类型及多维数组
-
数组操作及随机抽样
-
数学函数及代数运算
-
数组索引及其他用法
NumPy 数组类型
NumPy 提供了比 Python 本身更为丰富的数值类型,涵盖了多种精度的整数、浮点数和复数类型。这些数值类型在 NumPy 中被归于 dtype
对象的实例中,我们可以用 dtype
参数在数组中指定数值类型。
数值类型
-
bool
:布尔类型,值为 True 或 False。 -
int
:整数类型,通常为 int32 或 int64。 -
float32
和float64
:单精度和双精度浮点数。 -
complex64
和complex128
:复数,由两个浮点数表示。
示例代码:
import numpy as np
a = np.array([1.1, 2.2, 3.3], dtype=np.float64)
print(a, a.dtype) # 查看数组及其数据类型
你也可以使用 .astype()
方法在不同的数值类型之间相互转换:
a.astype(int) # 将数组的数值类型从 float64 转换为 int
NumPy 数组生成
在 Python 内建对象中,数组有三种形式:列表、元组和字典。而 NumPy 提供了更强大的 ndarray
多维数组对象,支持高维度的数据处理。
数组创建方式
NumPy 提供了多种方法创建数组,包括从 Python 数组结构转换、使用内置函数创建等。
-
从 Python 数组结构转换:
np.array([[1, 2, 3], [4, 5, 6]])
-
使用 NumPy 原生方法创建:
-
使用
arange()
创建等差数组:np.arange(3, 7, 0.5) # 创建从 3 到 7 的等差数组,步长为 0.5
-
使用
ones()
创建全为 1 的数组:np.ones((2, 3)) # 创建 2 行 3 列的数组,值全为 1
-
使用
zeros()
创建全为 0 的数组:np.zeros((3, 2)) # 创建 3 行 2 列的数组,值全为 0
-
使用
eye()
创建单位矩阵:np.eye(3) # 创建 3x3 单位矩阵
-
-
使用
linspace()
创建等距数值数组:np.linspace(0, 10, 10, endpoint=True) # 在 0 到 10 之间生成 10 个等距数值
-
使用随机函数创建数组:
np.random.rand(2, 5) # 生成 2 行 5 列的随机数组,值在 [0, 1) 之间
数组基本操作
NumPy 提供了多种方法对数组进行操作,例如重设形状、展开、轴移动和转置。
数组重设形状
reshape()
方法可以不改变数组数据的情况下改变其形状。
np.arange(10).reshape((5, 2)) # 将 1 维数组重设为 5 行 2 列
数组展开
ravel()
可以将任意形状的数组扁平化,变为 1 维数组。
a = np.arange(10).reshape((2, 5))
np.ravel(a) # 将二维数组展开为一维数组
轴交换和数组转置
使用 swapaxes()
或 transpose()
可以交换数组的轴。
np.transpose(a) # 转置数组 a
维度改变
NumPy 提供了 atleast_1d()
, atleast_2d()
, atleast_3d()
等方法,可以将输入数据直接视为指定维度的数组。
print(np.atleast_2d([4, 5, 6])) # 将一维数组转换为二维数组
数组索引和切片
NumPy 的多维数组支持完整的 Python 数组索引语法,我们可以通过索引值访问特定位置的元素。
一维数据索引
一维数组的索引和 Python 列表相似,可以通过索引值访问特定位置的元素。
a = np.arange(10)
print(a[1]) # 获取索引值为 1 的数据
多维数据索引
多维数组的索引使用逗号分割不同维度的索引值。
a = np.arange(20).reshape(4, 5)
print(a[1, 2]) # 获取第 2 行,第 3 列的数据
数组切片
NumPy 里面针对多维数组的切片操作和 Python 列表的切片操作相似,使用 :
表示范围。
a = np.arange(20).reshape(4, 5)
print(a[0:3, 2:4]) # 先取第 3、4 列,再取第 1、2、3 行
你还可以指定步长,例如:
a[:, ::2] # 每隔两列取值
数组操作与运算
NumPy 提供了丰富的数学函数和数组操作方法,帮助你高效地完成科学计算任务。
数学函数
NumPy 提供了三角函数、对数函数、指数函数等多种数学函数,可以直接对数组进行运算。
np.sin(a) # 计算数组 a 中每个元素的正弦值
np.log(a) # 计算数组 a 中每个元素的自然对数
算术运算
你可以对 NumPy 数组进行加减乘除等算术运算。
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(np.add(a, b)) # 对应元素相加
print(np.multiply(a, b)) # 对应元素相乘
统计运算
NumPy 提供了用于统计数组中数据的函数,例如求和、求均值等。
print(np.sum(a)) # 计算数组 a 中所有元素的和
print(np.mean(a)) # 计算数组 a 的均值
随机数生成
NumPy 的随机模块 numpy.random
提供了多种生成随机数的方法。
-
生成随机数:
np.random.rand(3, 3) # 生成 3x3 的随机数组,值在 [0, 1) 之间
-
生成随机整数:
np.random.randint(1, 10, size=(2, 3)) # 生成 2x3 的随机整数数组,值在 [1, 10) 之间
-
随机抽样:
np.random.choice(10, 5) # 从 0-9 中随机抽取 5 个数
实验总结
本次课程主要学习了 NumPy 的使用方法和技巧,包括数值类型、多维数组、数组的创建方法和基本操作。NumPy 是 Python 中进行数值计算和科学计算的基础工具,它提供了强大的数组操作和数学函数,极大地提升了数据分析和数学运算的效率。
通过 NumPy,科学计算变得更加简单、直观。它为数组的创建、操作和运算提供了丰富的方法,能够满足我们在数据科学和工程计算中的各种需求。希望大家通过不断练习加深对这些方法的理解,并将其应用于实际问题的解决中。