NumPy 教程

NumPy 首页 NumPy 简介 NumPy 环境

数组

NumPy Ndarray 对象 NumPy 数据类型

创建和操作数组

NumPy 数组创建例程 NumPy 数组操作 NumPy 基于现有数据创建数组 NumPy 基于数值范围创建数组 NumPy 数组迭代 NumPy 重塑数组 NumPy 连接数组 NumPy 堆叠数组 NumPy 拆分数组 NumPy 展平数组 NumPy 转置数组

索引与切片

NumPy 索引 &切片 NumPy 索引 NumPy 切片 NumPy 高级索引 NumPy 高级索引 NumPy 字段访问 NumPy 使用布尔数组切片

数组属性与操作

NumPy 数组属性 NumPy 数组形状 NumPy 数组大小 NumPy 数组步长 NumPy 数组元素大小 NumPy 广播 NumPy 算术运算 NumPy 数组加法 NumPy 数组减法 NumPy 数组乘法 NumPy 数组除法

高级数组运算

NumPy 交换数组的轴 NumPy 字节交换 NumPy 副本和视图 NumPy 逐元素数组比较 NumPy 过滤数组 NumPy 连接数组 NumPy 排序、搜索& 计数函数 NumPy 搜索数组 NumPy 数组并集 NumPy 查找唯一行 NumPy 创建日期时间数组 NumPy 二元运算符 NumPy 字符串函数 NumPy 矩阵库 NumPy 线性代数 NumPy Matplotlib NumPy 使用 Matplotlib 绘制直方图

排序和高级操作

NumPy 数组排序 NumPy 沿轴排序 NumPy 使用花式索引进行排序 NumPy 结构化数组 NumPy 创建结构化数组 NumPy 操作结构化数组 NumPy 记录数组 NumPy 加载数组 NumPy 保存数组 NumPy 将值附加到数组 NumPy 交换列数组 NumPy 将轴插入数组

处理缺失数据

NumPy 处理缺失数据 NumPy 识别缺失值 NumPy 移除缺失数据 NumPy 插补缺失值数据

性能优化

NumPy 使用数组进行性能优化

线性代数

NumPy 线性代数 NumPy 矩阵库 NumPy 矩阵加法 NumPy 矩阵减法 NumPy 矩阵乘法 NumPy 逐元素矩阵运算 NumPy 点积 NumPy 矩阵求逆 NumPy 行列式计算 NumPy 特征值 NumPy 特征向量 NumPy 奇异值分解 NumPy 求解线性方程 NumPy 矩阵范数

元素级矩阵运算

NumPy 总和 NumPy 平均值 NumPy 中位数 NumPy 最小值 NumPy 最大值

集合运算

NumPy 唯一元素 NumPy 交集 NumPy 并集 NumPy 差集

随机数生成

NumPy 随机数生成器 NumPy 排列和重排 NumPy 均匀分布 NumPy 正态分布 NumPy 二项分布 NumPy 泊松分布 NumPy 指数分布 NumPy 瑞利分布 NumPy 逻辑分布 NumPy 帕累托分布 NumPy 使用 Seaborn 可视化分布 NumPy 多项分布 NumPy 卡方分布 NumPy Zipf 分布

文件输入 &输出

NumPy 使用 NumPy 进行 I/O NumPy 从文件读取数据 NumPy 将数据写入文件 NumPy 支持的文件格式

数学函数

NumPy 数学函数 NumPy 三角函数 NumPy 指数函数 NumPy 对数函数 NumPy 双曲函数 NumPy 舍入函数

傅里叶变换

NumPy 离散傅里叶变换 (DFT) NumPy 快速傅里叶变换 (FFT) NumPy 逆傅里叶变换 NumPy 傅里叶级数和变换 NumPy 信号处理应用 NumPy 卷积

多项式

NumPy 多项式表示 NumPy 多项式运算 NumPy 求多项式的根 NumPy 求多项式的根

统计

NumPy 统计函数 NumPy 描述性统计

日期时间函数

NumPy 日期和时间基础知识 NumPy 表示日期和时间 NumPy 日期和时间运算 NumPy 使用日期时间进行索引 NumPy 时区处理 NumPy 时间序列分析 NumPy 处理时间增量 NumPy 闰秒处理 NumPy 矢量化日期时间运算

ufunc

NumPy ufunc 简介 NumPy 创建通用函数 (ufunc) NumPy 算术通用函数 (ufunc) NumPy 小数舍入 ufunc NumPy 对数通用函数(ufunc) NumPy 求和通用函数 (ufunc) NumPy 乘积通用函数 (ufunc) NumPy 差分通用函数 (ufunc) NumPy 寻找最小公倍数 (LCM) NumPy 寻找最大公约数 (GCD) NumPy 三角函数 (ufunc) NumPy 双曲线 (ufunc) NumPy 集合运算(ufunc)

实用资源

NumPy 快速指南 NumPy 备忘单


NumPy 速查表

NumPy 速查表 提供了所有基础主题的快速参考。NumPy 是 Python 中一个流行的库,用于基于线性代数、统计学等的数学运算。通过学习这份速查表,您可以有效地使用 NumPy 解决各种问题。仔细阅读本备忘单,了解其基础知识,提升您的工作效率。

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 中,NumPyPandas 是两个常用的库,经常一起用于数据操作和分析。

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')