【发布时间】:2019-09-16 22:08:46
【问题描述】:
我想生成如下形式的随机向量
[ i if random.uniform(0,1) <= probs[i] for i prange(K) ]
对于K 长度的概率数组probs。每个结果向量都有介于 0 和 K 之间的元素。从概念上讲,这就像翻转K 特定硬币(具有特定正面的概率)并记录哪些硬币显示正面。
任意返回长度使得难以使用numba 中的任何自动并行化选项。例如,
from numba import prange, njit, int64, float64
import numpy as np
@njit([int64[:](float64[:], int64)])
def rand_coin(freqs,r):
return np.arange(r)[np.random.uniform(0,1,size=r)<=freqs]
@njit(parallel=True)
def rand_coins(freqs,n):
r = freqs.shape[0]
return [rand_coin(freqs,r) for i in range(n)] # **
r = 10; n =100
freqs = np.random.uniform(0,1,r)
rand_coins(freqs, n)
连续工作很好,但如果将星号行中的range 替换为prange,则会产生double free or corruption 错误。
是否可以并行化在numba 中返回随机长度数组的函数?
【问题讨论】:
标签: python numpy parallel-processing numba