1. 数组统计运算 (Stats)
理论部分
| 函数名 | 作用 | 关键参数 (axis) 说明 |
|---|
sum() | 计算元素总和 | axis=0 (列和), axis=1 (行和) |
mean() | 计算算术平均值 | 同上 |
min() / max() | 返回最小/最大值 | 同上 |
argmin() / argmax() | 返回最小/最大值的索引 | 同上(默认展平计算) |
cumsum() | 计算累积和 | 默认展平计算 |
cumprod() | 计算累积积 | 默认展平计算 |
std() | 计算标准差 | 衡量数据离散程度 |
var() | 计算方差 | 标准差的平方 |
实操代码
import numpy as np
# --- 准备数据 ---
# 创建一个 2x3 的二维数组
arr = np.array([[1, 2, 3],
[4, 5, 6]])
print("【原始数组】\n", arr)
print("-" * 30)
# 1. 基础统计:和、均值、最大/最小值
print("1. sum (总和):", arr.sum())
print("2. mean (均值):", arr.mean())
print("3. max (最大值):", arr.max())
print("4. min (最小值):", arr.min())
# 2. 索引查找:找位置
# 展平后数组为 [1, 2, 3, 4, 5, 6]
print("5. argmax (最大值索引):", arr.argmax()) # 输出 5 (对应元素6的位置)
print("6. argmin (最小值索引):", arr.argmin()) # 输出 0 (对应元素1的位置)
# 3. 累积运算
print("7. cumsum (累积和):", arr.cumsum())
# 解释:1, 1+2, 1+2+3, 1+2+3+4... => [1, 3, 6, 10, 15, 21]
print("8. cumprod (累积积):", arr.cumprod())
# 解释:1, 1*2, 1*2*3... => [1, 2, 6, 24, 120, 720]
# 4. 方差与标准差
print("9. std (标准差):", arr.std()) # 标准差
print("10. var (方差):", arr.var()) # 方差
# 5. 按轴统计 (axis)
print("\n【按轴统计演示】")
print("axis=0 (列操作):", arr.sum(axis=0)) # [1+4, 2+5, 3+6] => [5, 7, 9]
print("axis=1 (行操作):", arr.sum(axis=1)) # [1+2+3, 4+5+6] => [6, 15]

2. 数组排序与检索 (Sort & Search)
理论部分
| 函数名 | 作用 | 备注 |
|---|
sort() | 对数组进行排序 | 默认按最后一个轴排序 |
argsort() | 返回排序后的索引 | 常用于间接排序 |
where() | 三元运算 (条件筛选) | np.where(条件, 真值, 假值) |
extract() | 根据条件提取元素 | 需要先生成条件数组 |
实操代码
import numpy as np
# --- 准备数据 ---
arr = np.array([3, 1, 2, 5, 4])
matrix = np.array([[3, 1], [2, 4]])
print("【排序与检索演示】")
print("原始数组:", arr)
print("-" * 30)
# 1. sort: 直接排序
sorted_arr = np.sort(arr)
print("1. sort (排序后):", sorted_arr)
# 2. argsort: 返回索引
# 原数组 [3, 1, 2, 5, 4] 排序后 [1, 2, 3, 4, 5]
# 索引位置: 1在原第1位, 2在原第2位, 3在原第0位...
print("2. argsort (排序索引):", np.argsort(arr)) # 输出 [1, 2, 0, 4, 3]
# 3. where: 条件判断 (类似 Excel 的 IF)
# 语法: where(条件, 满足条件的值, 不满足条件的值)
cond = arr > 3
print("3. where (大于3显示'大',否则'小'):", np.where(cond, '大', '小'))
# 输出: ['小' '小' '小' '大' '大']
# 4. extract: 提取满足条件的元素
print("4. extract (提取大于3的元素):", np.extract(cond, arr))
# 输出: [5 4]

3. 集合运算 (Set Operations)
理论部分
| 函数名 | 作用 | 备注 |
|---|
unique() | 找出唯一值并返回 | 去重 |
intersect1d() | 计算交集 | 两个数组共有的元素 |
union1d() | 计算并集 | 合并去重 |
setdiff1d() | 计算差集 | 在数组1中但不在数组2中 |
setxor1d() | 计算对称差集 | 只在其中一个数组中出现的元素 |
实操代码
import numpy as np
# --- 准备数据 ---
a = np.array([1, 2, 3, 4, 5])
b = np.array([4, 5, 6, 7, 8])
print("【集合运算演示】")
print("数组a:", a)
print("数组b:", b)
print("-" * 30)
# 1. unique: 去重 (如果数组本身有重复)
c = np.array([1, 1, 2, 3])
print("1. unique (去重):", np.unique(c))
# 2. intersect1d: 交集 (Intersection)
print("2. intersect1d (交集 a∩b):", np.intersect1d(a, b)) # [4, 5]
# 3. union1d: 并集 (Union)
print("3. union1d (并集 a∪b):", np.union1d(a, b)) # [1, 2, 3, 4, 5, 6, 7, 8]
# 4. setdiff1d: 差集 (Difference)
print("4. setdiff1d (a中有b中无):", np.setdiff1d(a, b)) # [1, 2, 3]
# 5. setxor1d: 对称差集 (Symmetric Difference)
print("5. setxor1d (对称差集):", np.setxor1d(a, b))
# 解释:(a中有b中无) + (b中有a中无) => [1, 2, 3, 6, 7, 8]

4. 线性代数 (Linear Algebra)
理论部分
| 函数名 | 作用 | 备注 |
|---|
dot() | 点积 / 矩阵乘法 | 最常用的矩阵乘法 |
vdot() | 计算向量的点积 | 会把数组展平 |
inner() | 内积 | 类似 dot,但在多维数组上有区别 |
matmul() | 矩阵乘法 (Python 3.5+) | 推荐的矩阵乘法方式 |
det() | 计算行列式 | 方阵才有行列式 |
inv() | 计算逆矩阵 | 方阵且满秩 |
实操代码
import numpy as np
# --- 准备数据 ---
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])
print("【线性代数演示】")
print("矩阵A:\n", A)
print("矩阵B:\n", B)
print("-" * 30)
# 1. dot: 矩阵乘法 (核心)
# A.dot(B) 等价于 A @ B
result_dot = np.dot(A, B)
print("1. dot (矩阵乘法 A * B):")
print(result_dot)
# 计算过程: [1*5+2*7, 1*6+2*8] => [19, 22]
# [3*5+4*7, 3*6+4*8] => [43, 50]
# 2. det: 行列式
det_A = np.linalg.det(A)
print("2. det (行列式 |A|):", det_A) # 1*4 - 2*3 = -2
# 3. inv: 逆矩阵
# 只有行列式不为0才有逆矩阵
if det_A != 0:
inv_A = np.linalg.inv(A)
print("3. inv (逆矩阵 A^-1):")
print(inv_A)
# 4. matmul: 现代矩阵乘法
# 推荐使用 @ 符号,更直观
result_mat = A @ B
print("4. matmul (A @ B):")
print(result_mat)

5. 随机数模块 (Random)
理论部分
| 函数名 | 作用 | 备注 |
|---|
rand() | 生成 [0, 1) 均匀分布随机数 | rand(2,3) 生成 2x3 矩阵 |
randn() | 生成标准正态分布随机数 | 均值为0,方差为1 |
randint() | 生成整数随机数 | randint(0, 10) 生成 0-9 |
normal() | 生成正态分布随机数 | 可指定均值和方差 |
uniform() | 生成指定范围均匀分布 | uniform(1, 10) |
seed() | 设置随机种子 | 保证结果可复现 |
实操代码
import numpy as np
print("【随机数演示】")
print("-" * 30)
# 1. 设置种子 (保证每次运行结果一样)
np.random.seed(42)
# 2. rand: [0, 1) 之间的随机数
print("1. rand (0-1随机):", np.random.rand())
# 3. randint: 整数随机
# 生成 1 个 0 到 9 的整数
print("2. randint (整数随机):", np.random.randint(0, 10))
# 4. randn: 标准正态分布 (高斯分布)
# 生成一个接近 0 的数,大部分在 -1 到 1 之间
print("3. randn (正态分布):", np.random.randn())
# 5. normal: 自定义正态分布
# 生成均值为 100,标准差为 15 的随机数 (模拟智商分布)
print("4. normal (均值100):", np.random.normal(100, 15))
# 6. 生成数组
print("5. 生成 2x3 的随机整数矩阵:")
print(np.random.randint(0, 100, (2, 3)))
