首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环索引不规则增加的函数

循环索引不规则增加的函数
EN

Stack Overflow用户
提问于 2018-09-28 07:47:19
回答 1查看 180关注 0票数 1

我有我的功能:

代码语言:javascript
复制
import numpy as np

def monte_carlo1(N):
    x = np.random.random (size = N)
    y = np.random.random (size = N)

    dist = np.sqrt(x ** 2 + y ** 2)
    hit = 0
    miss = 0


    for z in dist:
        if z <=1:
            hit += 1
        else:
            miss +=1

    hit_ratio = hit / N

    return hit_ratio

我想做的是对10个不同的N值运行这个函数100次,将数据收集到数组中。

例如,可以通过以下方式生成几个数据集合:

代码语言:javascript
复制
data1 = np.array([monte_carlo1(10) for i in range(100)])
data2 = np.array([monte_carlo1(50) for i in range(100)])
data3 = np.array([monte_carlo1(100) for i in range(100)])  

但是,如果我可以创建一个while循环,它可以迭代10次来生成10个数据数组,而不是拥有10个变量data1...data10,那就更好了。

然而,我希望能够在monte_carlo(N)中以不规则的数量增加N的值,所以在我的循环中,我不能在每次迭代中只给N增加一个固定值。

WOuld,有人建议我如何构建这样的循环吗?

谢谢

编辑:

代码语言:javascript
复制
N_vals = [10, 50, 100, 250, 500, 1000, 3000, 5000, 7500, 10000]


def data_mc():
    for n in N_vals:
        data = np.array([monte_carlo1(n) for i in range(10)])
    return data

我像这样设置了函数,但是函数的输出只是一个数组,这表明我做错了什么,并且N_values没有被循环

EN

回答 1

Stack Overflow用户

发布于 2018-09-28 20:13:56

下面是一个使用pandas.DataFrame的解决方案,其中行索引是该迭代的n的值,列表示每个repeat迭代。

代码语言:javascript
复制
import pandas as pd

def calc(n_list, repeat):
    # this will be a simply list of lists, no special 'numpy' arrays
    result_list = []

    for n in n_list:
        result_list.append([monte_carlo1(n) for _ in range(repeat)])

    return pd.DataFrame(data=result_list, index=n_list)

这将允许您在之后进行一些数据分析:

代码语言:javascript
复制
>>> from my_script import calc
>>> n_list = [10, 50, 100, 250, 500]
>>> df = calc(n_list, 10)
>>> df
         0      1      2      3      4      5      6      7      8      9
10   0.600  0.800  0.700  0.800  0.600  1.000  0.800  0.800  0.700  0.900
50   0.840  0.860  0.700  0.860  0.740  0.860  0.780  0.740  0.740  0.820
100  0.770  0.780  0.730  0.790  0.780  0.730  0.760  0.740  0.770  0.690
250  0.784  0.804  0.792  0.768  0.800  0.780  0.792  0.800  0.804  0.764
500  0.798  0.776  0.782  0.786  0.768  0.798  0.786  0.774  0.774  0.796

现在,您可以按n的值计算统计数据

代码语言:javascript
复制
>>> import pandas as pd
>>> stats = pd.DataFrame()
>>> stats['mean'] = df.mean(axis=1)
>>> stats['standard_dev'] = df.std(axis=1)
>>> stats
      mean  standard_dev
10   0.7700      0.125167
50   0.7940      0.061137
100  0.7540      0.030984
250  0.7888      0.014459
500  0.7838      0.010891

例如,此数据分析表明,随着n的增加,您的预测会变得更准确(std更小)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52546482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档