为什么healpix的"alm"例程返回相同长度的l和m数组?
根据我对量子物理和大学数学的记忆,对于每一个模式 l
,都会有 m = l-1, l, l+1
。但是,为什么在使用 healpix(在我的例子中,特别是 healpy)的球面调和函数时,比如 healpy.sphtfunc.alm2map
,返回的 l
和 m
数组长度是一样的呢?
2 个回答
3
安德烈亚·宗卡的回答中缺少的一些要点:
- 对于每一个模式
l
,m
的范围实际上是从-l
到+l
(所以总共有2l+1
个值)。但是我们处理的是实数信号,对于相反的m
,alm
是复共轭的,因此HEALPix
不会存储m<0
的alm
值(所以只存储l+1
个)。 - 在
hp.map2alm
返回的alm
数组中,安德烈亚的例子显示,数组的顺序是先按m
从小到大排列,然后再按l
从小到大排列。你不需要自己去记索引,如果想知道数组alm
中(l≥0,m≥0)
的位置,可以使用方便的函数hp.Alm.getidx(lmax,l,m)
,其中lmax = hp.Alm.getlmax(len(alm))
。
4
我想你说的是 map2alm
。
我们来看一个例子:
import numpy as np
import healpy as hp
m = np.arange(12) # define a map
lmax = 2
alm = hp.map2alm(m, lmax=lmax) # spherical armonic transform
print(alm)
[ 1.94198894e+01 +0.00000000e+00j -1.22780488e+01 +0.00000000e+00j
-3.22928935e-01 +0.00000000e+00j 6.85510448e-01 -2.13069336e+00j
4.66136940e-16 +6.36302781e-18j -6.44680479e-01 +1.16180552e+00j]
print(alm.shape)
(6,)
所以 alm
实际上是一个一维的向量。
那 alm
是怎么索引的呢?
l, m = hp.Alm.getlm(lmax=lmax)
print(l)
[0 1 2 1 2 2]
print(m)
[0 0 0 1 1 2]
所以,对于 l = 2
,m
的值是 [0, 1, 2]
。
你可以在 HEALPix
的入门指南中了解更多信息:http://healpix.jpl.nasa.gov/pdf/intro.pdf