NumPy 速查表
NumPy 速查表 提供了所有基础主题的快速参考。NumPy 是 Python 中一个流行的库,用于基于线性代数、统计学等的数学运算。通过学习这份速查表,您可以有效地使用 NumPy 解决各种问题。仔细阅读本备忘单,了解其基础知识,提升您的工作效率。
- NumPy 简介
- 安装 NumPy
- 导入 NumPy
- 创建 NumPy 数组
- 数组数据类型
- 数组形状和大小
- 重塑和平整数组
- 索引和切片数组
- 布尔索引
- 特定索引
- 基本数组操作
- 通用函数
- 聚合函数
- 生成随机数
- 拆分数组
- NumPy 中的复制与查看
- 线性代数
- 统计函数
- 排序和搜索
- 过滤数组
- 处理缺失数据
- 使用结构化数组
- 内存布局和优化
- 将 NumPy 与 Pandas 结合使用
- 保存和加载数组
1. NumPy 简介
在简介中,NumPy 是一个处理数组和数学运算的 Python 库。NumPy 是"Numerical Python"的缩写。NumPy 提供了丰富的功能,如下所示:
- 高性能数值运算。
- 支持复数和矩阵。
- 与 Pandas 和 Matplotlib 等流行库集成。
2. 安装 NumPy
要在系统上安装 NumPy,请使用以下命令 -
pip install numpy
3. 导入 NumPy
要导入 Python 库 (numpy),请使用以下代码 -
import numpy as np
4.创建 NumPy 数组
要在 Python 中创建 NumPy 数组,请使用 ndarray 对象,即 array() 函数。
# 一维数组 np.array([1, 2, 3]) # 二维数组 np.array([[1, 2], [3, 4]])
5. 数组数据类型
NumPy 数据类型 (dtype) 是 NumPy 数组可以保存的特定数据类型。 NumPy 拥有多种数据类型,例如 int、float、bool 等。
import numpy as np # 指定数据类型 arr = np.array([1, 2, 3], dtype=np.float32) print(arr.dtype)
6.数组形状和大小
NumPy 的 shape 表示数组的维度,而 size 表示数组中元素的总数。
# 返回数组形状 arr.shape # 返回元素数量 arr.size # 返回维度数量 arr.ndim
7.数组重塑和平展
在 NumPy 中,我们使用重塑函数 reshape() 来改变数组的形状。平展数组的定义是将多维数组转换为一维数组。
arr.reshape((2, 3)) # 重塑为 2*3 arr.flatten() # 平展为 1 维
8.索引和切片数组
在 NumPy 中,索引 和 切片 用于访问和操作数组中的元素。
索引
索引允许用户访问 NumPy 数组中的特定元素。
import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) # 访问第 0 行第 1 列的元素 element = arr[0, 1] print(element)
切片
在 NumPy 中,切片 允许用户从指定元素访问数据范围。切片的语法为"array[start:end:step]"。
import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7, 8]) # range slice = arr[2:5] print(slice)
9.布尔索引
NumPy 中的布尔索引允许用户根据条件从数组中选择元素。在这里,用户可以使用"True"和"False"值来代替整数值。
import numpy as np # 创建 NumPy 数组 arr = np.array([10, 20, 30, 40, 50]) # 条件 bool_array = arr > 25 # 使用布尔数组对原始数组进行索引 result = arr[bool_array] print(result)
10.特定索引
特定索引是通过访问数组中存在的元素组来定义的。这里,我们有两种方法可以获取特定索引。-
i. 整数数组索引
import numpy as np # 创建一个 NumPy 数组 arr = np.array([11, 21, 31, 41, 51, 61]) # 使用索引数组访问特定元素 indexes = np.array([0, 2, 4]) res = arr[indexes] print(res)
ii.多维索引
import numpy as np # 多维数组 arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 第一行和第三行 row_indices = np.array([0, 2]) # 第二列和第三列 col_indices = np.array([1, 2]) # 使用 np.ix_ 为指定的行和列创建网格 res = arr[np.ix_(row_indices, col_indices)] print(res)
11.基本数组运算
此处,数组运算与算术运算符配合使用。
arr1 + arr2 # 加法 arr1 - arr2 # 减法 arr1 * arr2 # 乘法 arr1 / arr2 # 除法 arr1 ** 2 # 平方
12.通用函数
在 NumPy 中,通用函数 的缩写形式是"ufuncs",它对 n 维数组 (ndarray) 进行操作。
import numpy as np arr1 = np.array([3, 4, 6, 3]) arr2 = np.array([1, 5, 4, 1]) # ufunc (add) 将两个数组元素相加 res = np.add(arr1, arr2) print(res)
13. 聚合函数
在 NumPy 中,聚合函数 是一种数学运算,它包含一个或多个数组元素以生成结果。
np.sum(arr) # 总和 np.mean(arr) # 平均值 np.max(arr) # 最大值 np.min(arr) # 最小值
14.生成随机数
在 NumPy 中,生成随机数的定义是生成不可预测的数字。
import numpy as np # [0, 1] 范围内的随机数 x = np.random.rand(3, 3) # 标准正态分布 y = np.random.randn(3, 3) # 随机整数 z = np.random.randint(1, 10, (2, 2)) print(x) print(y) print(z)
15.拆分数组
在 NumPy 中,可以使用 split 函数或 numpy.split 函数将数组拆分为两个或多个子数组。
import numpy as np arr = np.array([11, 12, 13, 14, 15, 16]) res_arr = np.array_split(arr, 3) print(res_arr)
16. NumPy 中的复制与视图
在 NumPy 中,理解数组复制与视图之间的区别,对于有效的内存管理和数据操作至关重要。
i. NumPy - 复制
数组的副本是使用其自身数据创建的新数组。对副本所做的更改不会影响原始数组。
import numpy as np # 创建原始数组 arr = np.array([1, 2, 3, 4, 5]) # 原始数组的副本 copy_array = np.copy(arr) # 对复制数组的修改 copy_array[0] = 10 print("原始数组:", arr) print("复制数组的结果:", copy_array)
ii. NumPy - 视图
数组的视图是一个新的数组对象,它与原始数组的数据相同。对副本所做的更改将影响原始数组。
import numpy as np # 创建原始数组 arr = np.array([1, 2, 3, 4, 5]) # 原始数组的视图 view_array = arr[1:4] # 对视图数组的修改 view_array[0] = 20 print("原始数组:", arr) print("视图数组的结果:", view_array)
17.线性代数
在 NumPy 中,线性代数是数学的一个分支,它允许使用 NumPy 数组函数进行加法、乘法、逆运算以及求解线性方程组。
np.dot(A, B) # 点积 np.linalg.inv(A) # 矩阵的逆 np.linalg.det(A) # 行列式
18.统计函数
在 NumPy 中,统计函数是内置函数,允许用户直接在 numPy 数组上计算平均值、中位数、标准差、方差、最小值、最大值、百分位数等统计量。
# 标准差 np.std(arr) # 方差 np.var(arr) # 第 40 个百分位数 np.percentile(arr, 40)
19. 排序和搜索
在 NumPy 中,排序是指按特定顺序(通常按升序或降序)排列元素序列的过程。 NumPy 中的 搜索 是指查找数组中符合特定条件的元素索引的过程。
# 对数组进行排序 np.sort(arr) # 返回排序后元素的索引 np.argsort(arr) # 大于 5 的元素的索引 np.where(arr > 5)
20.过滤数组
在 NumPy 中,过滤一个数组,该数组包含从满足特定条件的数组中选定的元素。
arr[arr > 5]
21.处理缺失数据
在 NumPy 中,处理 缺失数据是指用户管理数据集中数据点缺失的策略。
# 检查 NaN 值 np.isnan(arr) # 将 NaN 替换为零 np.nan_to_num(arr)
22.使用结构化数组
在 NumPy 中,处理结构化数组时,需要定义数据类型 (dtype),该数据类型指定字段的名称和类型。
dtype = [('name', 'S10'), ('age', 'i4')] data = np.array([('Mark', 25), ('Jobin', 30)], dtype = dtype)
23. 内存布局与优化
在 NumPy 中,内存布局是指数据元素在内存中的排列方式。以下是内存优化过程的一些关键方面 -
- dtype 选择:使用数据类型,例如,numpy.float16 而不是 numpy.float64。
- 内存对齐:将数组存储在连续的内存中以减少碎片。
- 查看数组:使用视图而不是副本来节省内存。
arr.nbytes # 内存使用量(以字节为单位) arr.strides # 每个维度在内存中的步长
24.将 NumPy 与 Pandas 结合使用
在 Python 中,NumPy 和 Pandas 是两个常用的库,经常一起用于数据操作和分析。
import numpy as np import pandas as pd # 创建 NumPy 数组 data = np.array([[11, 12, 13], [14, 15, 16], [17, 18, 19]]) # 从 NumPy 数组创建数据框 df = pd.DataFrame(data, columns=['A', 'B', 'C']) print("从 NumPy 数组创建数据框:") print(df)
25.保存和加载数组
NumPy 中的保存和加载数组包含两个函数:numpy 库中的 save() 和 load()。以下代码演示了如何保存和加载数组。
# 保存到 .npy 文件 np.save('data.npy', arr) # 从 .npy 文件加载 np.load('data.npy')