FortunaMCP

FortunaMCP

🚀 Fortuna 随机数生成函数文档

Fortuna 是一个多语言随机数生成库,支持 Python、C++ 和 Go 等多种编程语言。它提供了丰富的概率分布函数和统计工具,广泛应用于科学计算、数据分析、蒙特卡洛模拟等领域。

✨ 主要特性

  • 多语言支持:提供多种语言的接口。
  • 丰富的概率分布:涵盖连续和离散分布。
  • 高效的算法:采用经过验证的随机数生成算法。
  • 模块化设计:便于扩展和集成。

📦 安装指南

在 Python 中,可以通过以下命令安装:

pip install fortuna

💻 使用示例

基础用法

import Fortuna as fr

# 生成一个均匀分布在[0,1)区间的随机数
print(fr.uniform())
# 输出类似:0.7532196185644483

# 生成一个均值为0,标准差为1的正态分布随机数
print(fr.normal(0, 1))
# 输出类似:-0.12345678901234567

# 模拟抛硬币,正面概率为0.5
print(fr.coin(0.5))
# 输出类似:True(表示正面)

高级用法

# 以下是更多具体分布函数的使用示例

# 离散分布

# 伯努利试验
print(fr.bernoulli(0.7))  # 输出1表示成功,0表示失败

# 二项分布
print(fr.binomial(10, 0.3))  # 输出在0到10之间的整数

# 几何分布
print(fr.geometric(0.4))  # 输出失败次数

# 负二项分布
print(fr.negative_binomial(3, 0.7))  # 输出失败次数

# 泊松分布
print(fr.poisson(2.5))  # 输出整数

# 连续分布

# 均匀分布
print(fr.uniform(0, 5))  # 输出在0到5之间的随机数

# 正态分布
print(fr.normal(5, 2))  # 输出符合N(5,2²)分布的随机数

# 指数分布
print(fr.exponential(0.5))  # 输出等待时间

# 帕累托分布
print(fr.pareto(2.5))  # 输出符合帕累托分布的随机数

# 布尔分布
print(fr.weibull(3, 2))  # 输出符合威布尔分布的随机数

# 卡方分布
print(fr.chi_squared(5))  # 输出符合χ²(5)分布的随机数

# F 分布
print(fr.f_distribution(5, 10))  # 输出符合F(5,10)分布的随机数

# t 分布
print(fr.t_distribution(3))  # 输出符合t(3)分布的随机数

# 对数正态分布
print(fr.log_normal(0, 0.5))  # 输出对数正态分布的随机数

# 柯西分布
print(fr.cauchy(0, 2))  # 输出符合柯西分布的随机数

# 贝塔分布
print(fr.beta(2, 5))  # 输出符合贝塔分布的随机数

📚 详细文档

统计工具

随机抽样

import numpy as np

# 无放回抽样
population = np.array([10, 20, 30, 40, 50])
print(fr.sample(population, 3))  # 输出一个包含3个元素的数组,如 [10, 30, 40]

# 分层抽样
population = {'A': [1, 2, 3], 'B': [4, 5, 6]}
print(fr.stratified_sample(population, 2))  # 每个分层中抽取一个元素,如 {'A': 2, 'B': 4}

假检验验

# Kolmogorov - Smirnov 检验
sample = [1.2, 1.5, 2.0, 2.5, 3.0]
print(fr.kolmogorov_smirnov_test(sample))  # 输出p值,用于检验样本是否符合某个分布

# Shapiro - Wilk 检验
sample = [1.2, 1.5, 2.0, 2.5, 3.0]
print(fr.shapiro_wilk_test(sample))  # 输出统计量和p值,用于检验样本是否符合正态分布

统计建模

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())  # 输出logit回归结果

示例

蒙特卡洛模拟

import numpy as np

# 模拟掷骰子的期望值
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)}")

风险管理

import numpy as np
import matplotlib.pyplot as plt

# 模拟投资组合的风险
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()

质量控制

import numpy as np
import matplotlib.pyplot as plt

# 检查生产过程中的缺陷率
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()

随机数生成与统计模拟步骤

步骤 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 库来生成各种分布的随机数,并进行复杂的统计模拟。这对于科学研究、工程设计、金融建模等领域非常有用,能够帮助你做出更明智的数据驱动决策。

  • 0 关注
  • 0 收藏,31 浏览
  • system 提出于 2025-10-06 22:36

相似服务问题

相关AI产品