簡體   English   中英

Healpix如何處理NaN以在天空地圖上插值數據?

[英]How Healpix deal with NaN to interpolate data on the sky map?

我在phi-theta空間中使用這種格式的datapoint[37][19] 但是由於我的數據無法覆蓋整個天空,因此datapoint組中存在一些NaN。 整個datapoint大約有一半的NaN。 datapoint中約9/10的非NaN值為負,其中約1/10為正。

我嘗試了這個插值函數:

scipy.interpolate.RectSphereBivariateSpline(theta,phi,datapoint.T)

但它返回了錯誤。 我問我如何將包含NaN,正值和負值的數據插值到Healpix可以用來制作地圖的水平。 我有一個由底圖制成的不平滑的地圖。

在此處輸入圖片說明

我不知道您的問題是關於1)處理丟失的數據,2)處理NaN還是3)將球體上的任意數據轉換成Healpix地圖。

1)在大面積的天空上插補丟失的數據至少需要對您的數據有一定的統計知識,以便對丟失的內容進行約束實現。 但是,僅當您執行非本地操作(例如卷積或漸變)時才需要填補這些空白,因此這取決於您打算對數據進行什么處理。

2)將丟失的數據設置為NaN肯定會搞砸所有可用的插值方案。

3)下面的python代碼將與您類似的數據集(據我所知)轉換為2個Healpix貼圖,一個使用最近握點(NGP)采樣,另一個使用BSpline插值。 請注意,第二個在存在NaN的情況下極有可能無法工作,而第一個非常強大。

import healpy as hp
import numpy as np
import pylab as pl

datapoint = np.zeros((37,19), dtype=np.float)
datapoint[18,9] = 1.0
datapoint[0,9] = -1.0

nside      = 64
npix       = hp.nside2npix(nside)

# location of Healpix pixels center
ip         = np.arange(npix)
theta_rad, phi_rad = hp.pix2ang(nside, ip)

# map0 : NGP sampling
theta_deg = np.rad2deg(theta_rad)
phi_deg   = np.rad2deg(phi_rad)
hp_0      = datapoint[np.rint(phi_deg/10.).astype(int), \
                      np.rint(theta_deg/10.).astype(int)]
hp.mollview(hp_0,title='NGP map')

# map1: BSpline interpolation
from scipy.interpolate import RectSphereBivariateSpline
epsilon = 1.e-12
th_in = np.linspace(epsilon,  np.pi-epsilon, 19)
ph_in = np.linspace(epsilon,2*np.pi-epsilon, 37)
lut   = RectSphereBivariateSpline(th_in, ph_in, datapoint.T, s=1)
hp_1  = lut.ev(theta_rad, phi_rad)
hp.mollview(hp_1,title='BSpline map')

pl.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM