healpy - HEALpy - 从像素、l 和 m 的函数中获取球面谐波
问题描述
我需要计算球面谐波的积分及其在球体的一小部分上的不同阶数(l,m)的乘积(为了简单起见,我们假设在半个球体上)。
Healpix/Healpy 包使得计算球谐函数变得非常容易和快速,将函数乘以球谐函数 (SH) 的积分替换为预定义像素中的函数 * SH 值的总和(请参阅此链接)。
但是,我看不到如何直接从 healpy 获得球谐函数的显式值(即只是一个类似 Ylm(index,l,m) 的函数)。
到目前为止,我尝试使用具有球谐函数的包sphtools,并使用简单的代码将其转换为 healpix:
import numpy as np
import pyshtools as pysh
import healpy as hp
def Ylm_sphtools(theta,phi,l,m,csphase=-1):
Ylm_sphtools= np.vectorize(pysh.expand.spharm_lm)(l,m,theta,phi,normalization='ortho',kind='complex', degrees=False,csphase=csphase)
return Ylm_sphtools
def get_Ylm_healpy(nside,l,m):
npix=hp.nside2npix(nside)
theta,phi=hp.pix2ang(nside,np.arange(npix))
return Ylm_sphtools(theta,phi,l,m)
>get_Ylm_healpy(512,10,5)
做它需要的:给我一个 NSIDE=512 的 healpy 地图上每个像素的 Y(l=10,m=5) 值,但正如人们可能已经理解的那样,这非常慢(与 healpy. anafast 函数等)。
所以我的问题是:如何在 healpix 贴图上获得球面谐波(实数和虚数)解析?从这一点开始的集成很简单:将您的 Ylm 值与感兴趣的掩码相加,然后就完成了。
谢谢。
解决方案
来自 healpix 的一位设计师 Erik Hivon 的回答。
要获得healpix 格式的球谐函数Ylm
或阶数,可以:l,m
nside
import healpy, numpy
alms = numpy.zeros( ((l+1)*(l+2) - (l-m)*(l-m+1))//2 , dtype=complex)
alms[-1] = amplitude
ylm = healpy.alm2map(alms, nside=nside, pol=False, sigma=0.0, lmax=l, mmax=m)
amplitude = 0.5
对于函数的实部和amplitude = 0.5j
虚部。
结果是实部和虚部之差(虚部应乘以1j
)。
看起来是合法的,我会在这里测试它并很快报告结果。
编辑:是的,这有效。map2alm
如果使用 not healpy.map2alm
,但使用上面获得的球谐函数的积分,它可以很好地再现命令。
推荐阅读
- angular - Google Firebase 和 http 发布到列表
- asynchronous - 如何在python中使用asyncio异步运行具有不同参数的相同函数
- ruby - 使用 Net::Sftp 上传文件后,文件有时会消失
- nativescript - 更改应用程序上下文后的 NativeScript Angular 路由错误
- jakarta-ee - 将@Dependent CDI bean 注入 EJB 会导致内存泄漏
- swift - deinit 调用但 uint 测试未完成
- scipy - 对 R^d 中的分箱点使用三角测量
- quarkus - 如何在 Quarkus 中以编程方式注册 bean?
- r - 如何在输出前通过函数处理ggplot的所有文本元素?
- javascript - 固定相对 div 中的 div