2016-12-07 13 views
1

Предположим, у меня есть три количества: тета, фи и v (тета, фи). Я хотел бы использовать угловое биннинг, чтобы я мог интерполировать любые будущие тета & phi, чтобы получить v. Я совершенно новый для healpix и не понимаю, как это сделать. По сути, мне нужна сетка тета и phi, а затем хотелось бы использовать scipy.griddata для интерполяции. Благодарю.Угловой биннинг с использованием healpy

+0

у вас было смотреть на [numpy.histogram] (https://docs.scipy.org/ doc/numpy/reference/generated/numpy.histogram.html) – DrBwts

ответ

0

Вы можете просто использовать интерполяцию с scipy.interpolate.interp2d, см. https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.interpolate.interp2d.html, даже не используя healpy.

Однако позвольте мне показать, как вы это сделаете, используя карту healpy. Идея состоит в том, что вы предварительно компилируете v(theta,phi) для каждого пикселя карты, а затем для будущих theta и phi вы обнаружите, к какому пикселю они принадлежат, и быстро получить значение карты в этом пикселе с помощью healpy.

Смотрите мой ноутбук здесь: https://gist.github.com/zonca/e16fcf42e23e30fb2bc7301482f4683f

Я скопировал код ниже для справки:

import healpy as hp 
import numpy as np 

NSIDE = 64 

print("Angular resolution is {:.2f} arcmin".format(hp.nside2resol(NSIDE, arcmin=True))) 
NPIX = hp.nside2npix(NSIDE) 
print("Number of pixels", NPIX) 
pixel_indices = np.arange(NPIX) 
theta_pix, phi_pix = hp.pix2ang(NSIDE, pixel_indices) 
def v(theta, phi): 
    return theta ** 2 
v_map = v(theta_pix, phi_pix) 
new_theta, new_phi = np.radians(30), np.radians(0) 
new_pix = hp.ang2pix(NSIDE, new_theta, new_phi) 
print("New theta and phi are hitting pixel", new_pix) 
# We find what pixel the new coordinates are hitting and get the precomputed value of V at that pixel, to increase accuracy, you can increase NSIDE of the precomputed map. 
v_map[new_pix] 
v(new_theta, new_phi) 
+0

Это было очень полезно, спасибо! – user6769140