python - 如何在Python中使用蒙特卡罗方法求球体的体积?

标签 python jupyter-notebook montecarlo

我需要在jupyter笔记本的python3环境中使用蒙特卡罗方法求出球体的体积。但我讲师代码中的方法示例似乎没有意义。

我被指示修改我的讲师的代码,该代码使用蒙特卡罗方法通过单位正方形中的圆来查找 pi;然而,当我运行他们的代码时,我得到的 pi 值为 0.04,这太小了。我知道如何调整它来找到球体的体积,但我得到的答案又太小了。以下是讲师的代码。

import numpy as np

n = 100
x = np.random.random(n)
y = np.random.random(n)

z = np.sqrt(x**2 + y**2)

ninside = len( np.where(z < 1.) )
pi = 1.*ninside/n * 4.

print(pi)

当你运行代码并打印pi时,你会得到0.04,这显然不正确,它应该大约是3.14。这段代码应该如何工作以及我应该如何使用蒙特卡罗方法来找到球体的体积?

最佳答案

替换

ninside = len( np.where(z < 1.) )

ninside = len( np.where(z < 1.)[0] )

np.where()返回一个元组,因此在获取长度之前需要将数组从元组中取出。

在调试此类内容时,我建议在解释器中逐行运行它并检查每个新变量的值。

这就是我发现的len(np.where(z < 1.))一直是1,然后我查看了np.where(z < 1.)的值,发现它是一个元组,里面有一个数组。

关于python - 如何在Python中使用蒙特卡罗方法求球体的体积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55444441/

相关文章:

python - 在同一方法上传递对象字段和 one2many 字段 - Odoo v8

python - Redshift + SQLAlchemy 长查询挂起

python - Matplotlib:绘制二元高斯曲线下的路径积分

python - Pandas DataFrame.hist Seaborn 等价物

Matlab:假设一个 4x4 相关矩阵,如何生成一个 4x1 随机变量矩阵?

python - 将 .CSV 文件转换为 .XML

python - 按优先级对 Python 字典进行排序

python-3.x - Jupyter Notebook 没有保存超过一天。我怎样才能恢复丢失的工作?

tic-tac-toe - 蒙特卡洛树搜索 - "most promising"移动函数

cython - Bakeoff 第 1 部分 Python vs Cython vs Cython 类型化内存 View : LDA by Gibbs Sampling