如何使用Monte Carlo方法求出python中球体的体积?

How to use Monte Carlo method to find the volume of a sphere in python?

我需要使用 Monte Carlo 方法在 jupyter notebook 的 python3 环境中求出球体的体积。但是我讲师的代码里的方法的例子好像没有意义。

我被指示修改讲师的代码,该代码使用 monte carlo 方法在单位正方形中使用圆来查找圆周率;然而,当我 运行 他们的代码时,我得到的 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。这段代码应该如何工作以及我应该如何使用 Monte Carlo 方法来计算球体的体积?

替换

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

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

np.where() returns一个元组,所以在获取长度之前需要把数组从元组中取出来

当调试这样的东西时,我建议 运行 在解释器中逐行检查每个新变量的值。

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