【问题标题】:Monte Carlo simulation from a triangular distribution in PythonPython中三角分布的蒙特卡罗模拟
【发布时间】:2020-10-28 18:35:42
【问题描述】:

我是 python 新手,尝试使用 numpy.random 三角函数从多个三角分布运行一系列蒙特卡罗模拟,然后附加每次运行的模拟输出。样本数据如下。

ID  Low  Mode  High  
A   10   15    25
B   7    20    22
C   2    18    20
D   1    4     5
E   13   25    34

我想为每个 ID 运行 10000 次并附加结果。我知道我可以使用np.random.triangular(10, 15, 25, 10000) 为每个 ID 例如 ID A 运行。可能需要编写 for 循环来运行并附加所有 ID。谢谢!

更新!

预期的输出格式是:

ID Run      Output
A   1       11
A   2       23
.
.
.
A   10000   18
B   1       21.5
B   2       9
.   .       .
.   .       .
.   .       .
B   10000   19
C   1       2.5
C   2       13
.   .       .
.   .       .
.   .       .

【问题讨论】:

  • 您能否举一个您想要的输出示例,以便我知道如何编写答案?
  • @DPM - 我用预期的输出更新了我的帖子。谢谢!
  • 每个ID都有一个列表不是更简单吗?你也在使用库 pandas 吗?
  • @DPM - 我更喜欢一个包含所有输出的数据框,以便我可以在一个表中总结(如平均值)每个 ID。我的数据集中有 50 多个 ID。
  • @DPM - 谢谢!现在可以了。我修改它以获得我想要的。再次感谢!

标签: python numpy montecarlo triangular


【解决方案1】:

df 是一个包含您的数据的数据框,在循环中我正在遍历行,所以基本上新数据框的每一行都会有一个包含 10000 个样本的数组。

import pandas as pd
import numpy as np
Low = [10,7,2,1,13]
Mode = [15,20,18,4,25]
High = [25,22,20,5,34]
ID = ['A', 'B', 'C', 'D', 'E']
df = pd.DataFrame(zip(Low, Mode, High), columns = ['Low', 'Mode', 'High'], index = ID)
cols = ['Output']
        
df2 = pd.DataFrame(columns=cols, index = ID)

for l in range(5):
    result = np.random.triangular(df.iloc[l][0], df.iloc[l][1], df.iloc[l][2], 10000)
    df2.iloc[l][0] = result

输出示例:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 2013-07-23
    • 2012-04-26
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多