Fortuna 随机数生成函数文档
概述
Fortuna
是一个多语言随机数生成库,支持多种编程语言,包括 Python、C++ 和 Go 等。它提供了丰富的概率分布函数和统计工具,适用于科学计算、数据分析、蒙特卡洛模拟等领域。
特性
- 多语言支持:提供多种语言的接口。
- 丰富的概率分布:包括连续和离散分布。
- 高效的算法:使用经过验证的随机数生成算法。
- 模块化设计:易于扩展和集成。
安装
在 Python 中,可以通过以下命令安装:
pip install fortuna
使用示例
均匀分布
import Fortuna as fr
print(fr.uniform())
正态分布
import Fortuna as fr
print(fr.normal(0, 1))
抛硬币
import Fortuna as fr
print(fr.coin(0.5))
具体分布函数
离散分布
伯努利试验
print(fr.bernoulli(0.7))
二项分布
- 描述:生成一个二项分布随机变量。
- 参数:
n
(int) – 试验次数。
p
(float) – 每次成功的概率,默认为0.5。
- 示例
print(fr.binomial(10, 0.3))
几何分布
- 描述:生成一个几何分布随机变量,表示成功前的失败次数。
- 参数:
- 示例
print(fr.geometric(0.4))
负二项分布
- 描述:生成一个负二项分布随机变量,表示r次成功前的失败次数。
- 参数:
r
(int) – 成功次数。
p
(float) – 每次成功的概率,默认为0.5。
- 示例
print(fr.negative_binomial(3, 0.7))
泊松分布
- 描述:生成一个泊松分布随机变量,表示单位时间内的事件发生次数。
- 参数:
lambda
(float) – 平均率,默认为1.0。
- 示例
print(fr.poisson(2.5))
连续分布
均匀分布
- 描述:生成一个均匀分布在区间[low, high)的随机变量。
- 参数:
a
(float) – 区间的下界,默认为0.0。
b
(float) – 区间的上界,默认为1.0。
- 示例
print(fr.uniform(0, 5))
正态分布
- 描述:生成一个正态分布随机变量,也称为高斯分布。
- 参数:
mean
(float) – 分布的均值,默认为0.0。
std_dev
(float) – 分布的标准差,默认为1.0。
- 示例
print(fr.normal(5, 2))
指数分布
- 描述:生成一个指数分布随机变量,常用于模拟事件之间的等待时间。
- 参数:
lambda
(float) – 平均率,默认为1.0。
- 示例
print(fr.exponential(0.5))
帕累托分布
- 描述:生成一个帕累托分布随机变量,常用于模拟自然和社会现象中的长尾分布。
- 参数:
shape
(float) – 分布的形状参数,默认为2.0。
- 示例
print(fr.pareto(2.5))
布尔分布
- 描述:生成一个威布尔分布随机变量,常用于可靠性工程和风速分析。
- 参数:
shape
(float) – 分布的形状参数,默认为2.0。
scale
(float) – 分布的尺度参数,默认为1.0。
- 示例
print(fr.weibull(3, 2))
卡方分布
- 描述:生成一个卡方分布随机变量,常用于统计推断。
- 参数:
degrees_of_freedom
(int) – 自由度,默认为1.
- 示例
print(fr.chi_squared(5))
F 分布
- 描述:生成一个F分布随机变量,常用于方差分析。
- 参数:
numerator_dof
(int) – 分子自由度。
denominator_dof
(int) – 分母自由度。
- 示例
print(fr.f_distribution(5, 10))
t 分布
- 描述:生成一个t分布随机变量,常用于小样本统计推断。
- 参数:
degrees_of_freedom
(int) – 自由度,默认为1.
- 示例
print(fr.t_distribution(3))
对数正态分布
- 描述:生成一个对数正态分布随机变量,常用于模拟乘积或增长率。
- 参数:
mu
(float) – 对数的均值,默认为0.0。
sigma
(float) – 对数的标准差,默认为1.0。
- 示例
print(fr.log_normal(0, 0.5))
柯西分布
- 描述:生成一个柯西分布随机变量,是一种高尾分布。
- 参数:
location
(float) – 分布的位置,默认为0.0。
scale
(float) – 分布的尺度,默认为1.0。
- 示例
print(fr.cauchy(0, 2))
贝塔分布
- 描述:生成一个贝塔分布随机变量,常用于模拟概率密度函数。
- 参数:
alpha
(float) – 第一形状参数,默认为1.0。
beta
(float) – 第二形状参数,默认为1.0。
- 示例
print(fr.beta(2, 5))
统计工具
随机抽样
无放回抽样
import numpy as np
population = np.array([10, 20, 30, 40, 50])
print(fr.sample(population, 3))
分层抽样
population = {'A': [1, 2, 3], 'B': [4, 5, 6]}
print(fr.stratified_sample(population, 2))
假检验验
Kolmogorov-Smirnov 检验
sample = [1.2, 1.5, 2.0, 2.5, 3.0]
print(fr.kolmogorov_smirnov_test(sample))
Shapiro-Wilk 检验
sample = [1.2, 1.5, 2.0, 2.5, 3.0]
print(fr.shapiro_wilk_test(sample))
统计建模
线性回归
import pandas as pd
data = {'x': [1, 2, 3, 4, 5], 'y': [2, 3, 5, 6, 7]}
df = pd.DataFrame(data)
model = fr.linear_regression(df, 'x', 'y')
print(model.summary())
logistic 回归
data = {'x': [1, 2, 3, 4, 5], 'y': [0, 0, 1, 1, 1]}
df = pd.DataFrame(data)
model = fr.logistic_regression(df, 'x', 'y')
print(model.summary())
示例
蒙特卡洛模拟
def roll_dice():
return np.random.randint(1, 7)
results = [roll_dice() for _ in range(10000)]
print(f"Mean: {np.mean(results)}, Variance: {np.var(results)}")
风险管理
returns = np.random.normal(loc=0.05, scale=0.1, size=1000)
portfolio_value = 1000 * (1 + returns).cumprod()
print(f"Expected Return: {np.mean(returns)*100}%, Volatility: {np.std(returns)*100}%")
plt.plot(portfolio_value)
plt.show()
质量控制
sample_size = 50
defects = np.random.binomial(n=10, p=0.05, size=100)
control_limits = fr.control_limits(sample_size, defects)
print(f"Upper Control Limit: {control_limits[0]}, Lower Control Limit: {control_limits[1]}")
plt.plot(defects)
plt.axhline(y=control_limits[0], color='red')
plt.axhline(y=control_limits[1], color='red')
plt.show()
结论
随机数生成和统计模拟在科学研究、工程设计、金融分析等多个领域发挥着重要作用。通过使用NumPy和Fortuna这样的库,我们可以高效地进行数据采样和建模,从而为决策提供可靠的支持。
为了有效地生成随机数并进行各种统计模拟,我们推荐使用以下几个步骤:
步骤 1: 安装必要的库
首先,确保安装了NumPy和 Fortuna 库。这些库提供了丰富的函数来生成不同分布的随机数,并进行统计分析。
pip install numpy fortuna
步骤 2: 导入所需的库
在你的Python脚本中导入NumPy和 Fortuna:
import numpy as np
from fortuna import random, distributions
步骤 3: 生成均匀分布的随机数
使用 random.uniform
函数生成均匀分布在区间 [0,1) 的随机数。
single_random = random.uniform()
print(f"Single Uniform Random Number: {single_random}")
array_random = random.uniform(size=5)
print("\nArray of Uniform Random Numbers:")
print(array_random)
步骤 4: 生成正态分布的随机数
使用 random.normal
函数生成均值为0,标准差为1的正态分布随机数。
single_normal = random.normal()
print(f"\nSingle Normal Random Number: {single_normal}")
array_normal = random.normal(size=5)
print("\nArray of Normal Random Numbers:")
print(array_normal)
步骤 5: 生成自定义分布的随机数
你可以通过传递概率质量函数(PMF)或概率密度函数(PDF)来生成自定义分布的随机数。
pmf = np.array([1/6, 1/6, 1/6, 1/6, 1/6, 1/6])
custom_discrete = distributions.Categorical(pmf)
discrete_random = custom_discrete.sample(size=5)
print("\nCustom Discrete Random Numbers:")
print(discrete_random)
lambda_param = 0.5
pdf = lambda x: lambda_param * np.exp(-lambda_param * x)
custom_continuous = distributions.CustomDistribution(pdf)
continuous_random = custom_continuous.sample(size=5)
print("\nCustom Continuous Random Numbers:")
print(continuous_random)
步骤 6: 进行统计模拟
利用生成的随机数进行各种统计模拟,例如蒙特卡洛积分、风险分析或假设检验。
def monte_carlo_pi(n_samples):
random_points = random.uniform(low=-1, high=1, size=(n_samples, 2))
inside_circle = (random_points[:, 0]**2 + random_points[:, 1]**2) <= 1
return np.mean(inside_circle) * 4
n_samples = 10000
pi_estimation = monte_carlo_pi(n_samples)
print(f"\nMonte Carlo Estimation of π with {n_samples} samples: {pi_estimation}")
步骤 7: 可视化结果
使用 matplotlib 来可视化生成的随机数或模拟结果。
import matplotlib.pyplot as plt
plt.hist(array_normal, bins=15, density=True, alpha=0.6, color='b')
plt.title('Normal Distribution Sample')
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.show()
points = random.uniform(low=-1, high=1, size=(n_samples, 2))
inside = points[points[:, 0]**2 + points[:, 1]**2 <= 1]
outside = points[points[:, 0]**2 + points[:, 1]**2 > 1]
plt.scatter(inside[:, 0], inside[:, 1], color='blue', alpha=0.5)
plt.scatter(outside[:, 0], outside[:, 1], color='red', alpha=0.5)
plt.title('Monte Carlo Integration for π')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
步骤 8: 结果分析
根据生成的随机数和模拟结果,进行统计分析,例如计算均值、方差或其他所需的统计量,并根据需要调整参数或算法。
总结
通过上述步骤,你可以有效地利用NumPy和 Fortuna 库来生成各种分布的随机数,并进行复杂的统计模拟。这对于科学研究、工程设计、金融建模等领域非常有用,能够帮助你做出更明智的数据驱动决策。