文章目录
- 前言
- 一、简介
- 1.1 历史背景
- 1.2 核心功能
- 1.3 技术生态
- 1.4 环境配置
- 二、Ndarray 对象
- 2.1 基本概念
- 2.2 创建数组
- 2.3 构造函数参数
- 三、数据类型系统
- 3.1 标量数据类型
- 3.2 数据类型对象(dtype)
- 3.3 结构化类型的字段信息
- 四、数组属性与操作
- 4.1 形状操作
- 4.2 索引与切片
- 五、广播机制
- 5.1 广播规则
- 5.2 数组迭代
- 六、数组操作分类
- 6.1 修改形状
- 6.2 连接与分割
- 6.3 添加/删除元素
- 七、数学运算
- 7.1 基本算术
- 7.2 三角函数与舍入
- 7.3 统计函数
- 八、排序与搜索
- 8.1 排序算法比较
- 8.2 线性代数
- 九、数据可视化(Matplotlib 集成)
- 9.1 基本绘图
- 9.2 直方图
- 十、字符串与位操作
- 10.1 字符串函数
- 10.2 位操作
- 总结
前言
NumPy(Numerical Python)是一个功能强大的 Python 库,主要用于科学计算。它提供了一个高性能的多维数组对象(ndarray)以及用于操作这些数组的大量工具函数。
一、简介
1.1 历史背景
NumPy 的发展历程:
Numeric:由 Jim Hugunin 开发,是 NumPy 的前身
Numarray:另一个包含额外功能的数值计算包
2005年:Travis Oliphant 将 Numarray 功能整合到 Numeric 中,创建了 NumPy
开源项目:拥有来自全球的众多贡献者
1.2 核心功能
NumPy 主要提供以下功能:
多维数组操作:高效的数组算术和逻辑运算
数学函数:傅里叶变换、线性代数运算、随机数生成
科学计算基础:与 SciPy、Matplotlib 等库协同工作
1.3 技术生态
NumPy 通常与以下库一起使用:
SciPy:科学计算扩展
Matplotlib:数据可视化
这种组合构成了强大的科学计算平台,常被用作 MATLAB 的替代方案
1.4 环境配置
安装方法
bash# 使用 pip 安装pipinstallnumpy# 或使用科学计算发行版(推荐初学者)# Anaconda 或 Miniconda 已包含完整科学计算栈在线环境
官方推荐:TutorialsPoint CodingGround
优势:无需本地安装,可直接尝试示例代码
二、Ndarray 对象
2.1 基本概念
ndarray 是 NumPy 的核心对象,具有以下特点:
N 维同类型数据容器
零基索引访问
内存中连续存储
固定大小的数据类型(dtype)
2.2 创建数组
pythonimportnumpyasnp# 从列表创建arr1=np.array([1,2,3])# 多维数组arr2=np.array([[1,2],[3,4]])# 指定维数arr3=np.array([1,2,3,4,5],ndmin=2)# 指定数据类型arr4=np.array([1,2,3],dtype=complex)2.3 构造函数参数
python numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndmin=0)| 参数 | 说明 |
|---|---|
| object | 数组数据源(列表、元组等) |
| dtype | 数组元素类型 |
| copy | 是否创建副本 |
| order | 内存布局('C’行优先/'F’列优先) |
| subok | 是否允许子类 |
| ndmin | 最小维度数 |
三、数据类型系统
3.1 标量数据类型
NumPy 支持比 Python 更丰富的数值类型:
| 类型 | 描述 | 范围/特征 |
|---|---|---|
| bool | 布尔值 | True/False |
| int8/int16/int32/int64 | 有符号整数 | 8/16/32/64位 |
| uint8/uint16/uint32/uint64 | 无符号整数 | 8/16/32/64位 |
| float16/float32/float64 | 浮点数 | 半/单/双精度 |
| complex64/complex128 | 复数 | 实部虚部分别为32/64位浮点 |
3.2 数据类型对象(dtype)
dtype 对象描述如何解释内存块:
数据类型(整数、浮点等)
数据大小(字节数)
字节序(大端/小端)
3.3 结构化类型的字段信息
python# 创建 dtype 对象dt1=np.dtype(np.int32)dt2=np.dtype('i4')# 使用类型代码dt3=np.dtype('>i4')# 大端字节序# 结构化数据类型student_dtype=np.dtype([('name','S20'),# 字符串,20字节('age','i1'),# 1字节整数('marks','f4')# 4字节浮点])# 应用结构化类型students=np.array([('Alice',20,85.5),('Bob',22,92.0)],dtype=student_dtype)四、数组属性与操作
4.1 形状操作
python# 查看形状arr=np.array([[1,2,3],[4,5,6]])print(arr.shape)# 输出: (2, 3)# 重塑形状reshaped=arr.reshape(3,2)# 展平数组flattened=arr.flatten()# 返回副本raveled=arr.ravel()# 返回视图(可能)4.2 索引与切片
python# 基础切片arr=np.arange(10)print(arr[2:7:2])# [2 4 6]# 多维切片arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])print(arr2d[1:3,1:3])# [[5 6] [8 9]]# 高级索引(整数)rows=np.array([0,1,2])cols=np.array([0,1,0])print(arr2d[rows,cols])# [1 5 7]# 布尔索引print(arr2d[arr2d>5])# [6 7 8 9]五、广播机制
5.1 广播规则
广播允许不同形状数组进行算术运算:
维度较小的数组在前面补 1
输出数组每个维度的大小是输入数组该维度大小的最大值
输入数组的某个维度大小为 1 时,可沿该维度扩展
python# 示例:向量与标量运算a=np.array([1,2,3])b=np.array([10,20,30])c=a*b# 对应元素相乘5.2 数组迭代
python# 使用 nditer 迭代arr=np.arange(0,60,5).reshape(3,4)forelementinnp.nditer(arr):print(element,end=' ')六、数组操作分类
6.1 修改形状
| 函数 | 描述 |
|---|---|
| reshape | 改变数组形状而不改变数据 |
| flat | 数组的一维迭代器 |
| flatten | 返回展平后的数组副本 |
| ravel | 返回展平后的数组视图 |
6.2 连接与分割
| 类别 | 函数 | 描述 |
|---|---|---|
| 连接 | concatenate | 沿现有轴连接数组 |
| 连接 | stack | 沿新轴堆叠数组 |
| 连接 | hstack/vstack | 水平/垂直堆叠 |
| 分割 | split | 将数组分割为多个子数组 |
| 分割 | hsplit/vsplit | 水平/垂直分割 |
6.3 添加/删除元素
| 函数 | 描述 |
|---|---|
| resize | 改变数组形状(可修改大小) |
| append | 在数组末尾添加值 |
| insert | 在指定位置插入值 |
| delete | 删除指定位置的元素 |
| unique | 返回数组的唯一值 |
七、数学运算
7.1 基本算术
python a=np.array([[1,2],[3,4]])b=np.array([[5,6],[7,8]])# 逐元素运算print(np.add(a,b))# 加法print(np.subtract(a,b))# 减法print(np.multiply(a,b))# 乘法print(np.divide(a,b))# 除法7.2 三角函数与舍入
python# 三角函数(弧度制)angles=np.array([0,np.pi/2,np.pi])print(np.sin(angles))# 舍入arr=np.array([1.234,2.567,3.891])print(np.around(arr,2))# 保留两位小数7.3 统计函数
| 函数 | 描述 |
|---|---|
| amin/amax | 最小值/最大值 |
| ptp | 极差(最大值-最小值) |
| percentile | 百分位数 |
| median | 中位数 |
| mean | 算术平均数 |
| average | 加权平均数 |
| std | 标准差 |
| var | 方差 |
八、排序与搜索
8.1 排序算法比较
| 算法 | 速度 | 最坏情况 | 稳定性 |
|---|---|---|---|
| quicksort | 最快 | O(n²) | 不稳定 |
| mergesort | 中等 | O(n log n) | 稳定 |
| heapsort | 较慢 | O(n log n) | 不稳定 |
python# 排序示例arr=np.array([[3,7],[9,1]])print(np.sort(arr))# 默认按行排序print(np.sort(arr,axis=0))# 按列排序# 结构化数组排序dtype=[('name','S10'),('age',int)]data=np.array([('Alice',25),('Bob',20)],dtype=dtype)print(np.sort(data,order='name'))# 按姓名排序8.2 线性代数
python# 矩阵运算a=np.array([[1,2],[3,4]])b=np.array([[5,6],[7,8]])print(np.dot(a,b))# 矩阵乘法print(np.linalg.det(a))# 行列式print(np.linalg.inv(a))# 逆矩阵九、数据可视化(Matplotlib 集成)
9.1 基本绘图
pythonimportnumpyasnpimportmatplotlib.pyplotasplt# 线性图x=np.arange(1,11)y=2*x+5plt.plot(x,y)plt.show()# 散点图plt.plot(x,y,'ob')# 蓝色圆点plt.show()# 子图x=np.arange(0,3*np.pi,0.1)y_sin=np.sin(x)y_cos=np.cos(x)plt.subplot(2,1,1)plt.plot(x,y_sin)plt.title('Sine')plt.subplot(2,1,2)plt.plot(x,y_cos)plt.title('Cosine')plt.show()9.2 直方图
python# 数据分布可视化data=np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])plt.hist(data,bins=[0,20,40,60,80,100])plt.title("Histogram")plt.show()十、字符串与位操作
10.1 字符串函数
python# 向量化字符串操作arr=np.array(['hello','world'])print(np.char.add(arr,'!'))# 添加后缀print(np.char.multiply(arr,3))# 重复字符串print(np.char.upper(arr))# 转为大写10.2 位操作
python# 位运算a,b=13,17print(np.bitwise_and(a,b))# 位与print(np.bitwise_or(a,b))# 位或print(np.left_shift(a,2))# 左移总结
NumPy 作为 Python 科学计算的基石,其高效的多维数组操作和丰富的数学函数库使其成为数据科学、机器学习、工程计算等领域的必备工具。通过掌握 NumPy 的核心概念和常用操作,可以显著提升科学计算的效率和代码质量。