我有一个关于拟合和获取随机数的问题.
情况是这样的:
首先,我有一个数据点的直方图.我想把这个直方图解释为概率密度函数(例如2个自由参数),这样我就可以用它来产生随机数.我也想用这个函数来拟合另一个直方图.
在一些成员的帮助下,我确实建立了一个在 Python 中运行的代码,并评估一个需要两个巨大的np.arrays输入的函数。
并行运行的矢量化版本仍然非常耗时,并且比用串行 Fortran 编写的参考程序慢约 50 倍......
我想使用 cython 循环,我可以使用 OpenMP 或 MPI 来并行化。C++ 中的想法是这样的:
#pragma omp parallel for
for (i=0;i<np1;i++){
for (i=0;i<np2;i++){
double dist = sph(coord1_particle1,coord1_particle2,coord2_particle1,coord2_particle2)
int bin=binning_function(dist)
hist_array[bin]++
}
}
Run Code Online (Sandbox Code Playgroud)
任何想法都是完全受欢迎的。这是 Python 版本:
#a is an array containing two coordinates of two objects
def dist_vec(a): # a like [[array1,array2,array2,array2],[],[]...]
return sph(a[0],a[1],a[2],a[3]) # sph operates on coordinates
def vec_chunk(array_ab, bins) :
dist = dist_vec(array_ab)
hist, _ = np.histogram(dist, bins=bins)
return hist
def mp_dist(array_a,array_b, d, bins): #d …Run Code Online (Sandbox Code Playgroud)