表面密度分布

时间:2016-09-08 13:06:44

标签: python performance

我正在尝试计算表面密度分布,给定不同参数的3D球形密度分布,以便进行内插并将其作为它们的函数,以便稍后用于某些引力透镜建模。然而,循环遍历所有参数并评估2D Radius阵列R上的积分是非常耗时的(对于复杂的轮廓,需要数小时)。下面的代码描述了我要遵循的程序。有没有人有更好的建议来改善python中以下代码的性能?非常感谢你!

def density_profile(r, par_a, par_b, par_c):
    ...
    return ...

def surface_denstiy_profile(R, density_profile, *args):

    surface_density_array = []

    for R_i in R:

        surface_density_array.append( quad(lambda r : 2.0 * density_profile(r , *args, ) * r / np.sqrt(r**2. - R_i**2.), R_i, np.inf, epsabs=1.49e-03, epsrel=1.49e-03)[0] ) )

    return surface_density_array


surface_density = np.zeros((len(par_a_array), len(par_b_array), len(par_b_array)), dtype = object)

for par_a in range(0, len(par_a_array)) :

    for par_b in range(0, len(par_b_array)):

        for par_c in range(0, len(par_c_array)):

            surface_density[par_a, par_b, par_c] = surface_denstiy_profile(np.logspace(-2., 2., 100), density_profile, par_a_array[par_a], par_b_array[par_b], par_c_array[par_c])

0 个答案:

没有答案