2016-09-15 2 views
0

datapoint[37][19]의 형식으로 내 데이터가 phi-theta 공간에 있습니다. 그러나 내 데이터가 전체 하늘을 감당할 수 없기 때문에 datapoint 배열에 일부 NaN이 있습니다. 전체 datapoint에 약 NaN의 절반이 있습니다. datapoint의 9/10가 아닌 NaN 값은 음수이며 약 1/10이 양수입니다. Healpix가 NaN을 사용하여 하늘지도의 데이터를 보간하는 방법은 무엇입니까?

나는이 보간 기능 시도 :

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

을하지만하는 오류를 반환했습니다. Healpix가 맵을 만들기 위해 사용할 수있는 레벨에 NaN, 양수 및 음수 값이 들어있는 데이터를 어떻게 보간하면되는지 묻습니다. 나는베이스 맵에서 만든 평평한지도를 가지고있다. 귀하의 질문에 대한 1 인 경우

enter image description here

답변

0

나는 누락 된 데이터, 2) NaN을 다루는, 또는 3) Healpix지도에 영역에 임의의 데이터를 돌려 처리) 모른다.

1) 하늘의 넓은 영역에서 누락 된 데이터를 보간하려면 누락 된 데이터를 제한적으로 실현하기 위해 데이터에 대한 통계 지식이 필요합니다. 그러나 이러한 갭을 채우는 것은 비 로컬 작업 (예 : 컨볼루션 또는 그라디언트)을 수행하는 경우에만 필요하므로 데이터로 수행 할 계획이 무엇인지 에 의존합니다.

2) 누락 된 데이터를 NaN으로 설정하면 사용 가능한 모든 보간 체계가 확실히 엉망이됩니다.

3) 아래의 파이썬 코드는 Neal Grip Point (NGP) 샘플링을 사용하고 다른 하나는 BSpline 보간법을 사용하여 2 개의 Healpix 맵으로 사용자 데이터와 유사한 데이터 세트를 나타냅니다. 둘째는 NaN이있을 때 이 매우 강력하지만 대부분 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()