我需要在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/