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

我有我的职能:

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次,将数据收集到数组中。

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

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添加固定值。

有人会建议我如何建立这样的循环吗?

谢谢

编辑:

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并没有循环通过

参考方案

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

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)

这样一来,您便可以进行一些数据分析:

>>> 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的值计算统计信息:

>>> 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

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

Python:检查是否存在维基百科文章 - python

我试图弄清楚如何检查Wikipedia文章是否存在。例如,https://en.wikipedia.org/wiki/Food 存在,但是https://en.wikipedia.org/wiki/Fod 不会,页面只是说:“维基百科没有此名称的文章。”谢谢! 参考方案 >>> import urllib >>> prin…

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…

Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

Python Pandas导出数据 - python

我正在使用python pandas处理一些数据。我已使用以下代码将数据导出到excel文件。writer = pd.ExcelWriter('Data.xlsx'); wrong_data.to_excel(writer,"Names which are wrong", index = False); writer.…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…