0

スペースにこの形式のデータがdatapoint[37][19]ありphi-thetaます。しかし、私のデータは空全体をカバーできないため、datapoint配列には NaN が含まれています。全体の約半分の NaN がありますdatapoint。の約 9/10 の非 NaN 値datapointは負であり、それらの約 1/10 は正です。

この補間関数を試しました:

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

しかし、それはエラーを返しました。NaN、正と負の値を含むデータを、Healpix がマップの作成に使用できるレベルまで補間する方法を尋ねています。ベースマップから作成された平滑化されていないマップがあります。

ここに画像の説明を入力

4

1 に答える 1

0

あなたの質問が、1) 欠損データの処理、2) NaN の処理、または 3) 球体上の任意のデータを Healpix マップに変換することに関するものかどうかはわかりません。

1) 空の広い領域で不足しているデータを補間するには、不足しているものを限定的に実現するために、データの統計的知識が少なくとも必要です。ただし、これらのギャップを埋める必要があるのは、非ローカル操作 (畳み込みや勾配など) を行う場合のみであるため、データをどう処理するかによって異なります。

2) 不足しているデータを NaN に設定すると、利用可能なすべての補間スキームが確実に台無しになります。

3) 以下の python コードは、(私が知る限り) あなたのものに似たデータ セットを 2 つの Healpix マップに変換します。1 つは Nearest Grip Point (NGP) サンプリングを使用し、もう 1 つは BSpline 補間を使用します。2 番目の方法は 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()
于 2016-11-02T11:26:29.677 に答える