Skip to main content

统计方法与随机数

NumPy 提供丰富的统计函数和批量随机数生成能力。


数学与统计方法

returns = np.array([0.01, -0.02, 0.03, -0.01, 0.02])

returns.sum() # 求和
returns.mean() # 平均值
returns.std() # 标准差
returns.var() # 方差(= 标准差的平方)
returns.max() # 最大值
returns.min() # 最小值
returns.argmax() # 最大值的索引位置
returns.argmin() # 最小值的索引位置

方差与标准差的意义

方差衡量一组数据的离散程度——方差越大,波动越大。

数据:[1, 2, 3, 4, 5],均值 = 3

方差 = ((1-3)² + (2-3)² + (3-3)² + (4-3)² + (5-3)²) / 5
= (4 + 1 + 0 + 1 + 4) / 5 = 2.0

标准差 = √方差 = √2.0 ≈ 1.414

实际应用:

  • 质量控制:标准差越小 → 产品质量越稳定
  • 金融:标准差(波动率)衡量风险——波动率越大,风险越高
  • 范围估计:均值 ± 1倍标准差覆盖约 68% 数据,均值 ± 2倍覆盖约 95%
a = np.random.randn(1000) * 2 + 5 # 均值5, 标准差2 的正态分布

a.mean() # ≈ 5
a.std() # ≈ 2
# 大部分数据落在 [3, 7] 区间

随机数生成

NumPy 的 np.random 子模块支持批量生成数组:

np.random.seed(42) # 设置随机种子(保证可复现)

# 0-1 均匀分布
np.random.rand(10) # 10 个 [0,1) 的浮点数

# 指定范围的整数
np.random.randint(0, 10, 10) # 10 个 [0,10) 的整数
np.random.randint(0, 10, (3, 5)) # 3×5 的二维数组

# 指定范围的均匀分布
np.random.uniform(2.0, 4.0, 10) # 10 个 [2.0, 4.0) 的浮点数

# 从给定列表中随机抽取
np.random.choice([1, 3, 4, 5], size=10) # 抽 10 次(默认放回)

# 洗牌
a = np.array([1, 2, 3, 4, 5])
np.random.shuffle(a) # 原地打乱

np.random 的函数和 Python 自带 random 模块用法类似,区别是 NumPy 可以批量生成数组,第三个参数直接传 shape。


量化中常用的 NumPy 操作

prices = np.array([100, 102, 105, 103, 108])

# 计算日收益率
returns = np.diff(prices) / prices[:-1]

# 对数收益率
log_returns = np.diff(np.log(prices))

# 移动平均
def moving_average(data, window):
return np.convolve(data, np.ones(window)/window, mode='valid')

ma3 = moving_average(prices, 3)

# 年化夏普比率
risk_free_rate = 0.02 / 252
excess_returns = returns - risk_free_rate
sharpe = np.sqrt(252) * np.mean(excess_returns) / np.std(excess_returns)
print(f"年化夏普比率: {sharpe:.2f}")

性能对比

import time

# Python 原生列表
start = time.time()
py_list = [i ** 2 for i in range(1000000)]
print(f"Python 列表: {time.time() - start:.3f}s")

# NumPy 数组
start = time.time()
np_arr = np.arange(1000000) ** 2
print(f"NumPy 数组: {time.time() - start:.3f}s")
# NumPy 通常快 10-100 倍

NumPy 内容总结

章节核心内容
数组创建array(), zeros(), ones(), arange(), linspace(), reshape()
属性dtype, size, shape, ndim, T
向量化运算逐元素运算,无需循环
索引普通索引、切片、布尔索引、花式索引(四种可组合)
通用函数abs, sqrt, floor, ceil, modf, isnan, maximum
统计方法sum, mean, std, var, max, min, argmax
随机数rand, randint, uniform, choice, shuffle

NumPy 还有一些高级功能(傅里叶变换、线性代数、矩阵运算等)未在此展开——在量化投资中更多用 Pandas 做数据处理,NumPy 是基础层,它的数组和向量化运算理念贯穿整个 Python 数据分析生态。