Healpy/Healpix:总像素数和总球谐系数有什么关系?
Healpy/Healpix: What is the relationship between the total pixels and total spherical harmonic coefficients?
根据 Healpy/Healpix 文档,我无法理解天空图中的一个像素(这是一些测量值)与 Healpy 的 healpy.sphtfunc.map2alm
函数产生的球谐系数之间的关系,它计算给定地图的 a_lm 系数数组。 (这个问题也适用于anafast。)
我的理解是给定的像素应该对应一个球谐系数。然而,事实并非如此。完全没有。
与nside = 8
拍一张地图。本程序使用Healpy读取一张FITS格式的CMB地图,手动设置nside
值,读入地图,显示,然后计算球谐系数。
import math
import matplotlib.pyplot as plt
import numpy as np
import healpy as hp
import pyfits as pf
filename = "cmb_map.fits" # the name of the full-sky map
readmap = hp.read_map(filename) # readmap i.e. input map
nside = 8 # manually input the side value
'''
Here outputs:
NSIDE = 8
ORDERING = RING in fits file
'''
view = hp.mollview(readmap) # view the map, i.e. display it
'''
Shows sky map of the CMB
'''
totalnumberpixels = hp.nside2npix(nside)
print totalnumberpixels # For nside = 8, this should be 12*nside**2 = 768
arr = hp.map2alm(readmap) # This is an array of a_lm values
到目前为止一切顺利。 hp.map2alm()
函数现在 returns 300 个值,即 300 个球谐系数 a_lm。
arr.shape
输出“(300,)”。
为什么 768 个像素会计算出 300 个 a_lm 值? nside
和球谐系数总数之间是否存在数学关系?每个 nside
是否给出不同数量的 a_lm 系数?
计算一个a_lm需要多少像素?非常感谢任何 help/explanation!
编辑:
如下所述,像素总数为npix = 12*nside**2
。 map2alm
使用默认值 lmax = 3*nside-1
。所以,球谐系数的总数应该是奇数之和,最多为3*nside-1=23
。球谐系数的总数应该是(2*lmax+1)**2 = (6*nside-1)**2。 (2*lmax+1)^2=(2*23+1)^2 = (47)^2 = 2209 那么,这个数字300是从哪里来的呢? map2alm
到底在做什么?这怎么可能只是一个近似值?
我预计 2209 a_lm。我算了300。
像素和球谐系数之间没有直接关系。
您可以这样想象:地图像素是数据和您 "fit" 对数据的球谐函数。球谐函数是无限多(正交)函数的系统。
现在你对数据(像素)没有"fit"无限多的功能,有限制,你设置lmax或mmax或两者。 (球谐函数通常是 labelled/identified 乘以两个数字 l 和 m)。
l 和 m 是整数,l 从 0 到无穷大,对于每个 l,m 从 -m 到 m。
因此,例如,如果 lmax 为 2 并且对 m 没有限制,那么您正在处理 1+3+5=9 个函数。因此,您将有 9 个 alm 系数,(="fit" 的结果),独立于地图有多少像素。
好的,到目前为止一切顺利。
现在,球谐函数是复函数,系数也是。但地图是纯粹真实的。
因此,当阅读球谐函数时(维基百科已经足够好了),人们会发现如何定义球谐函数的实基,基本上使用 属性 即 Y_l,m=(-1)^m Y *_l,-m ,其中星号表示复数 conj。
现在如果你用复数作为这个基础函数的参数,你需要多少个?对于给定的 l,您将需要 l+1 个复数(记住我们从 l=0 开始计算)。如果你对给定的 l 求和,你会得到:
l=0 --> 1
l=1 --> 1+2=3
l=2 --> 1+2+3=6
l=3 --> 1+2+3+4=10
etc.
(请注意,如果将其加起来为 3*nside-1,则 nside 8 会得到 300)
同样重要的是要注意,对于这些复系数中的恰好 l+1 个,它们的虚部将为零! (对应 Y_l0 的那些)。现在,如果您计算独立参数的数量,例如 l=3:
l=3 --> 1+2+3+4=10
所以 10 个复数 = 20 个独立参数。但是其中4个只有实部20-4=16。正是人们所期望的,因为完整的虚部 Y_lm 有 32 个独立参数,所以实部将有一半。
所以,如上所述,参数l_max
决定了球谐系数a_{lm}的个数。对于 l
参数,a 的数量从 a_0
到 a_{lmax}
。 m
参数由l_{max}, l_{max}-1, l_{max}-2, ...., -l_{max}+2, -l_{max}+1, -l_{max}
决定。
因此,每个 l
的 m
个值的总数由 2l+1
给出,例如l=0
给出 1 个 m
,l=1
给出 3 个 m
,l=2
给出 5 个 m
,等等
Healpix/Healpy使用的map2alm
函数接受输入参数nside
,然后默认使用3*nside-1
计算球谐函数。
但是,nside
还决定了每张地图的像素总数。总像素数 npix
由 npix = 12*nside**2
给出。
评论:
npix = 12 * nside ** 2
l_max = 3 * nside - 1
因此,球谐系数的总数是i=0
到i= 2 * lmax + 1
的和级数。使用 map2alm
的默认参数,这给了我们从 i=0
到 i = 6 * nside - 1
的总和(即 2(3*nside-1) + 1
)
对于给定的地图,像素总数为12 * nside ** 2
,球谐系数总数a_lm
为i=0 to i= 6*nside-1
.
的总和
对吗?
根据 Healpy/Healpix 文档,我无法理解天空图中的一个像素(这是一些测量值)与 Healpy 的 healpy.sphtfunc.map2alm
函数产生的球谐系数之间的关系,它计算给定地图的 a_lm 系数数组。 (这个问题也适用于anafast。)
我的理解是给定的像素应该对应一个球谐系数。然而,事实并非如此。完全没有。
与nside = 8
拍一张地图。本程序使用Healpy读取一张FITS格式的CMB地图,手动设置nside
值,读入地图,显示,然后计算球谐系数。
import math
import matplotlib.pyplot as plt
import numpy as np
import healpy as hp
import pyfits as pf
filename = "cmb_map.fits" # the name of the full-sky map
readmap = hp.read_map(filename) # readmap i.e. input map
nside = 8 # manually input the side value
'''
Here outputs:
NSIDE = 8
ORDERING = RING in fits file
'''
view = hp.mollview(readmap) # view the map, i.e. display it
'''
Shows sky map of the CMB
'''
totalnumberpixels = hp.nside2npix(nside)
print totalnumberpixels # For nside = 8, this should be 12*nside**2 = 768
arr = hp.map2alm(readmap) # This is an array of a_lm values
到目前为止一切顺利。 hp.map2alm()
函数现在 returns 300 个值,即 300 个球谐系数 a_lm。
arr.shape
输出“(300,)”。
为什么 768 个像素会计算出 300 个 a_lm 值? nside
和球谐系数总数之间是否存在数学关系?每个 nside
是否给出不同数量的 a_lm 系数?
计算一个a_lm需要多少像素?非常感谢任何 help/explanation!
编辑:
如下所述,像素总数为npix = 12*nside**2
。 map2alm
使用默认值 lmax = 3*nside-1
。所以,球谐系数的总数应该是奇数之和,最多为3*nside-1=23
。球谐系数的总数应该是(2*lmax+1)**2 = (6*nside-1)**2。 (2*lmax+1)^2=(2*23+1)^2 = (47)^2 = 2209 那么,这个数字300是从哪里来的呢? map2alm
到底在做什么?这怎么可能只是一个近似值?
我预计 2209 a_lm。我算了300。
像素和球谐系数之间没有直接关系。
您可以这样想象:地图像素是数据和您 "fit" 对数据的球谐函数。球谐函数是无限多(正交)函数的系统。
现在你对数据(像素)没有"fit"无限多的功能,有限制,你设置lmax或mmax或两者。 (球谐函数通常是 labelled/identified 乘以两个数字 l 和 m)。
l 和 m 是整数,l 从 0 到无穷大,对于每个 l,m 从 -m 到 m。
因此,例如,如果 lmax 为 2 并且对 m 没有限制,那么您正在处理 1+3+5=9 个函数。因此,您将有 9 个 alm 系数,(="fit" 的结果),独立于地图有多少像素。
好的,到目前为止一切顺利。 现在,球谐函数是复函数,系数也是。但地图是纯粹真实的。 因此,当阅读球谐函数时(维基百科已经足够好了),人们会发现如何定义球谐函数的实基,基本上使用 属性 即 Y_l,m=(-1)^m Y *_l,-m ,其中星号表示复数 conj。
现在如果你用复数作为这个基础函数的参数,你需要多少个?对于给定的 l,您将需要 l+1 个复数(记住我们从 l=0 开始计算)。如果你对给定的 l 求和,你会得到:
l=0 --> 1
l=1 --> 1+2=3
l=2 --> 1+2+3=6
l=3 --> 1+2+3+4=10
etc.
(请注意,如果将其加起来为 3*nside-1,则 nside 8 会得到 300)
同样重要的是要注意,对于这些复系数中的恰好 l+1 个,它们的虚部将为零! (对应 Y_l0 的那些)。现在,如果您计算独立参数的数量,例如 l=3:
l=3 --> 1+2+3+4=10
所以 10 个复数 = 20 个独立参数。但是其中4个只有实部20-4=16。正是人们所期望的,因为完整的虚部 Y_lm 有 32 个独立参数,所以实部将有一半。
所以,如上所述,参数l_max
决定了球谐系数a_{lm}的个数。对于 l
参数,a 的数量从 a_0
到 a_{lmax}
。 m
参数由l_{max}, l_{max}-1, l_{max}-2, ...., -l_{max}+2, -l_{max}+1, -l_{max}
决定。
因此,每个 l
的 m
个值的总数由 2l+1
给出,例如l=0
给出 1 个 m
,l=1
给出 3 个 m
,l=2
给出 5 个 m
,等等
Healpix/Healpy使用的map2alm
函数接受输入参数nside
,然后默认使用3*nside-1
计算球谐函数。
但是,nside
还决定了每张地图的像素总数。总像素数 npix
由 npix = 12*nside**2
给出。
评论:
npix = 12 * nside ** 2
l_max = 3 * nside - 1
因此,球谐系数的总数是i=0
到i= 2 * lmax + 1
的和级数。使用 map2alm
的默认参数,这给了我们从 i=0
到 i = 6 * nside - 1
的总和(即 2(3*nside-1) + 1
)
对于给定的地图,像素总数为12 * nside ** 2
,球谐系数总数a_lm
为i=0 to i= 6*nside-1
.
对吗?