我正在尝试计算表面密度分布,给定不同参数的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])