You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 18:52:44