为什么healpix的"alm"例程返回相同长度的l和m数组?

-1 投票
2 回答
1165 浏览
提问于 2025-04-21 04:33

根据我对量子物理和大学数学的记忆,对于每一个模式 l,都会有 m = l-1, l, l+1。但是,为什么在使用 healpix(在我的例子中,特别是 healpy)的球面调和函数时,比如 healpy.sphtfunc.alm2map,返回的 lm 数组长度是一样的呢?

2 个回答

3

安德烈亚·宗卡的回答中缺少的一些要点:

  • 对于每一个模式 lm 的范围实际上是从 -l+l(所以总共有 2l+1 个值)。但是我们处理的是实数信号,对于相反的 malm 是复共轭的,因此 HEALPix 不会存储 m<0alm 值(所以只存储 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 = 2m 的值是 [0, 1, 2]

你可以在 HEALPix 的入门指南中了解更多信息:http://healpix.jpl.nasa.gov/pdf/intro.pdf

撰写回答