使用healpy快速计算healpy地图和2D高斯卷积的方法
我有一个healpix地图,nside=512(这意味着它是一个非常大的numpy.ndarray,大约有310万个元素)。我需要用一个二维高斯函数对它进行卷积。
我尝试创建一个高斯的healpix地图,然后把这两个numpy.ndarray相乘并求和;但是这个方法太慢了。
我尝试的第二个方法是定义一个高斯函数(不是地图),然后定义一个二维函数,这个函数在给定的x和y位置返回巨大地图和高斯函数的乘积值。接着我使用scipy.integrate.nquad来计算积分。这个方法比第一个快,但还是有点慢……
有没有办法利用球面谐波展开来更快地计算巨大地图和高斯函数的积分?比如说,先把巨大地图和高斯函数都展开成球面谐波,接着把它们的系数相乘,再转换回来,最后求和。
还有一些可能的改进方法,比如:a) 用巨大地图和高斯函数的对数来计算,这样对系数的操作就变成了简单的相加。b) 有没有办法直接从系数中得到积分,而不需要再转换回来?c) 限制展开的次数,这样可以加快整个过程?
如何正确地使用healpy来实现这些呢?
1 个回答
1
你可以试着使用 healpy.smoothing
,比如这样:
wmap_map_I_smoothed = hp.smoothing(wmap_map_I, fwhm=60, arcmin=True)
hp.mollview(wmap_map_I_smoothed, min=-1, max=1, title='Map smoothed 1 deg')
文档说明: http://healpy.readthedocs.org/en/latest/generated/healpy.sphtfunc.smoothing.html