考虑一个非常基本的蒙特卡罗模拟直线
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);
这确实可以产生所需的输出结果,但我觉得可能有一种更符合 Python 风格的方式来完成。我的想法对吗?如果不是,能否给我提供一些代码示例,告诉我如何更高效地完成呢?
举个例子,用 MATLAB 可以很容易地使用 bsxfun()
来编写,而不需要使用循环。Python 中是否有类似的功能或者甚至有专门处理此类问题的包呢?
y
的循环,这看起来非常像我在提问时所想到的。我只是想知道为什么你添加了一个 绘图 循环,因为它可以像我原来的代码一样不使用循环,只需使用plt.plot(x, y, "k", alpha=0.05)
。或者这是在内部迭代索引吗?抱歉,我有点困惑。 - Fred S