python - 蒙特卡罗和面积计算

标签 python matlab

应该接近0.3

$ cat monte.py 
import random,math
density=int(1e6)
x = [random.uniform(0,1)*7*math.pi for _ in range(density)]
y = [random.uniform(0,1) for _ in range(density)]
i = [math.sin(xx)*math.cos(xx) > yy for (xx,yy) in zip(x,y)]

print sum(i)/(float(density)*10.0)*7*math.pi

$ python monte.py 
0.350184850795

我正在尝试重写下面的代码,但由于某种原因,Python 代码甚至还不够接近。

x = rand(1, 1000000)*7pi;
y = rand(1, 1000000);
i = sin(x).* cos(x) >y;
Area3 = (sum(i) / 10000000)*7pi;

最佳答案

我在你的 matlab 和 python 版本之间得到了相同的结果...你确定 matlab 版本给你的是 ~2,而不是 ~0.35?

例如:

MATLAB:

x = rand(1, 1000000)*7*pi;
y = rand(1, 1000000);
i = sin(x).* cos(x) >y;
Area3 = (sum(i) / 10000000)*7*pi

得出:0.3511

你的纯Python版本:

import random,math
density=int(1e6)
x = [random.uniform(0,1)*7*math.pi for _ in range(density)]
y = [random.uniform(0,1) for _ in range(density)]
i = [math.sin(xx)*math.cos(xx) > yy for (xx,yy) in zip(x,y)]

print sum(i)/(float(density)*10.0)*7*math.pi

这会产生:0.347935156296

基于 Numpy:

import numpy as np
x = np.random.random(1e6) * 7 * np.pi
y = np.random.random(x.size)
i = np.sin(x) * np.cos(x) > y
print 7 * np.pi * i.sum() / (10 * x.size)

这会产生:0.350475133957

关于python - 蒙特卡罗和面积计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7940740/

相关文章:

matlab - 为什么我的人物看起来是动画的(当它不应该是动画时)?

MATLAB 在 Linux 上内存不足,尽管经常出现 "clear all"

matlab - matlab中的垂直反射?

python - MATLAB 比 Python 快吗(简单的小实验)

python - Kivy:绑定(bind)两个方法一个接一个地调用

Python 循环获取请求

python - Django 管理代理模型权限 Django 1.11

matlab - 如何在 RGB 空间中表示来自 PCA 空间的点

python - 使用不同格式的正则表达式提取电话号码python

java - matlab java类路径问题