一尘不染

为数组x中的每个元素选择n个项(从泊松分布中抽取)的快速方法

algorithm

我在解决遇到的问题时遇到了一些麻烦。

我有一个价格数组:

>>> x = np.random.randint(10, size=10)
array([6, 1, 7, 6, 9, 0, 8, 2, 1, 8])

并生成(随机)的泊松分布的到达数组:

>>> arrivals = np.random.poisson(1, size=10)
array([4, 0, 1, 1, 3, 2, 1, 3, 2, 1])

每个单次到达都应与相同索引的价格相关联。因此,在上述情况下,第一个元素(x [0])应该选择4次(y [0])。第二个元素(x [1])应该被选择0次(y
[1])…因此结果应该是:

array([6, 6, 6, 6, 7, 6, 9, 9, 9, 0, 0, 8, 2, 2, 2, 1, 1, 8])

是否有任何(快速)方法可以完成此任务,而无需遍历数组?任何帮助将不胜感激。


阅读 275

收藏
2020-07-28

共1个答案

一尘不染

您可以使用np.repeat

In [43]: x = np.array([6, 1, 7, 6, 9, 0, 8, 2, 1, 8])

In [44]: arrivals = np.array([4, 0, 1, 1, 3, 2, 1, 3, 2, 1])

In [45]: np.repeat(x, arrivals)
Out[45]: array([6, 6, 6, 6, 7, 6, 9, 9, 9, 0, 0, 8, 2, 2, 2, 1, 1, 8])

但请注意,对于某些计算,可能有必要避免形成此中间数组。参见例如scipy.stats.binned_statistic

2020-07-28