用几个构建一个数组。蒙特卡罗方法

时间:2013-10-01 13:03:54

标签: python numpy montecarlo

假设我们有几个数组(在我的例子中,有三个:a1a2a3)。我们还有一组随机均匀分布的数字r。它们的长度都相同。我需要构建一个数组a,将这三个首字母a1a2a3组合在一起,这样如果r[i]满足特定条件1,我们就会{ {1}}为a1[i],如果满足条件2,则我们将条件3视为a[i]a2[i]。这三个条件是互斥的。

我为此写了一个for循环:

a3[i]

这里,条件1,2,3在每个“a = empty(len(r)) for i in range(len(r)): if r[i] <= p1: a[i] = a1[i] if p1 < r[i] <= (p1 + p2): a[i] = a2[i] if r[i] > (p1 + p2): a[i] = a3[i] ”之后表示。 if ...p1被赋予了数字。这是蒙特卡罗模拟的一部分(数组p2a1a2也是具有给定分布的随机数。 它太慢了,我需要以某种方式对其进行矢量化,但不知道,如何去做。哪种方式最好? 非常感谢!

1 个答案:

答案 0 :(得分:4)

使用numpy.select,您可以从多个条件中进行选择:

conds = [r <= p1, r <= (p1 + p2), r > (p1 + p2)]
choices = [a1, a2, a3]
a = np.select(conds, choices)

在您的情况下,第三个条件实际上可能是任何评估为True的条件(例如,r == r)。