【发布时间】:2014-10-14 19:04:11
【问题描述】:
考虑一个非常基本的直线 y = m * x + b 的蒙特卡罗模拟,例如可视化参数m 和b 中不确定性的影响。 m 和 b 都是从正态分布中采样的。来自 MATLAB 背景,我会将其写为
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(start=0, stop=5, step=0.1)
n_data = len(x)
n_rnd = 1000
m = np.random.normal(loc=1, scale=0.3, size=n_rnd)
b = np.random.normal(loc=5, scale=0.3, size=n_rnd)
y = np.zeros((n_data, n_rnd)) # pre-allocate y
for realization in xrange(n_rnd):
y[:,realization] = m[realization] * x + b[realization]
plt.plot(x, y, "k", alpha=0.05);
这确实产生了所需的输出,但我觉得必须有一种更“Pythonic”的方式来做到这一点。我错了吗?如果没有,谁能给我一些代码示例,说明如何更有效地做到这一点?
举一个我正在寻找的例子:在 MATLAB 中,这可以很容易地在没有循环的情况下使用 bsxfun() 编写。在 Python 中是否有类似的东西,或者甚至是类似的东西的包?
【问题讨论】:
标签: python numpy random montecarlo