如何在Python中有效地生成具有随机斜率和截距的直线?

弗雷德·S

考虑一个非常基本的直线蒙特卡罗模拟y = m * x + b,例如为了可视化参数m不确定度的影响bm并且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中是否有类似的东西,甚至还有类似的软件包?

物理学家

您可以使用numpy数组广播y一步一步创建数组,如下所示。

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 = m * x[:, np.newaxis] + b

for val in y.transpose():
    plt.plot(x, val, alpha=0.05)

# Or without the iteration:
# plt.plot(x, y, alpha=0.05)

plt.show()

x[:, np.newaxis]强制x变为形状的列矢量,这与广播(50, 1)相反(50,)

然后,您可以直接在numpy数组上进行迭代(而不是在其索引上进行迭代),但是必须对数组进行转置(使用y.transpose()),否则对于每次迭代,您将获得每个1000个随机数的x值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Python中有效地生成仅包含唯一数字的随机数?

如何在Kotlin中有效地创建具有一定长度和相同值的String

如何在Linux中有效地从大文件中取出10%的随机行?

如何在R中有效地联接具有多个主键的表?

如何在python中有效地合并两个具有容差的数据帧

如何在熊猫中有效地分栏和分组?

如何在Javascript中有效地匹配和分组字符串?

如何在 Linq 中有效地进行内部连接和填充属性?

如何在Python中有效地在多个线程和进程之间共享数据?

如何在 Python 中有效地搜索和访问数据帧中的某些单元格?

如何在python/pandas中有效地創建索引和列名組合的矩陣

如何在 python 中有效地重复矩阵中的二进制模式和比率?

如何在python中有效地搜索列表

如何在python中有效地搜索列表?

如何在python中有效地将字典中的值分组

如何在python中有效地对列表进行分类

如何在Python中有效地将参数解译到数据库

如何在python类列表中有效地创建编号列表

如何在Python中有效地计算巨大的矩阵乘法(tfidf功能)?

如何在Python中有效地计算多个文档中的双字母组

如何在Python中有效地匹配两个数组值?

如何在 Python 中有效地按段聚合

如何在python中有效地找到图形的顶部边界线

如何在python中有效地结合断开的csr矩阵?

如何在 Cython 中有效地使用 Python 风格的整数?

如何在python中有效地根据多个条件拆分文本?

如何在MATLAB中有效地找到所有像素都具有相同颜色的视频帧?

如何在Isabelle / Isar中有效地证明具有多个变量的存在命题?

如何在Cloud Firestore中有效地获取不同集合中具有特定ID的文档?