Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为数组x中的每个元素选择n项(从泊松分布中提取)的快速方法_Python_Arrays_Algorithm_Numpy - Fatal编程技术网

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

Python 为数组x中的每个元素选择n项(从泊松分布中提取)的快速方法,python,arrays,algorithm,numpy,Python,Arrays,Algorithm,Numpy,我在解决我遇到的问题时遇到了一些困难 我有一个包含价格的数组: >>> 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 = 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])
有没有(快速)的方法来实现这一点,而不需要迭代数组?非常感谢您的帮助。

您可以使用:


但请注意,对于某些计算,可以避免形成这个中间数组。例如,我真的不知道如何在没有循环的情况下做到这一点。 您可以做的是在循环之前创建结果数组;这样以后就不需要连接了

Result = np.empty( arrivals.sum(), dtype='i' )
然后按块更改该数组的值:

Result_position = np.r_[ [0], arrivals.cumsum() ]
for i, xx in enumerate(x):
    Result[ Result_position[i]:Result_position[i+1] ] = xx

不确定这是否快速,但至少很短:
数组(sum(map(lambda x,a:[x]*a,x,arrivals))
如何使用生成的数组?出于某些目的,可以在不形成此中间阵列的情况下进行下一次计算。例如,看到,.Dang,就在我写完答案的时候。我应该知道这已经像往常一样在
numpy
中实现了。:-)+1正是我想要的!我将进一步研究如何解决这个问题,而不必形成整个中间数组。谢谢
Result_position = np.r_[ [0], arrivals.cumsum() ]
for i, xx in enumerate(x):
    Result[ Result_position[i]:Result_position[i+1] ] = xx