Healpy可视化Planck CMB极化图报错,求解决及功率谱计算方法
问题解决:healpy可视化CMB极化图报像素数错误
错误原因
你遇到的Wrong pixel number (it is not 12*nside**2)错误,是因为hp.read_map读取(1,2)返回的是两个独立的1D数组(对应Q、U极化分量),而hp.mollview默认只接受单张天空图(单个1D数组)。直接把两个数组传给mollview时,healpy会将其视为2D数组,像素数量不符合12*nside²的要求,因此触发错误。
修正方案
方案1:分别可视化Q、U分量
单独调用mollview显示每个极化分量:
import matplotlib.pyplot as plt import numpy as np import healpy as hp import pymaster as nmt # 读取Q(索引1)、U(索引2)极化分量 q_map, u_map = hp.read_map('/home/akozameh/COM_CMB_IQU-smica_2048_R3.00_hm2.fits', (1,2)) # 分别可视化Q和U hp.mollview(q_map, title='CMB SMICA Q极化图') plt.show() hp.mollview(u_map, title='CMB SMICA U极化图') plt.show()
方案2:用子图同时显示两个分量
通过matplotlib子图布局,在同一窗口展示两张图:
import matplotlib.pyplot as plt import numpy as np import healpy as hp import pymaster as nmt q_map, u_map = hp.read_map('/home/akozameh/COM_CMB_IQU-smica_2048_R3.00_hm2.fits', (1,2)) fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5)) hp.mollview(q_map, title='Q极化', ax=ax1, hold=True) hp.mollview(u_map, title='U极化', ax=ax2, hold=True) plt.tight_layout() plt.show()
后续计算带掩码的功率谱提示
如果要基于pymaster计算带掩码的极化功率谱,需要:
- 确保掩码是与地图同nside的1D数组(1表示有效像素,0表示被掩码)
- 用
nmt.NmtField封装极化图和掩码,注意极化场需要传入Q、U数组 - 构建功率谱计算的耦合矩阵并解耦得到最终的Cl谱
内容的提问来源于stack exchange,提问作者Augusto
相关产品推荐
相关产品推荐

