Предположим, у меня есть три количества: тета, фи и v (тета, фи). Я хотел бы использовать угловое биннинг, чтобы я мог интерполировать любые будущие тета & phi, чтобы получить v. Я совершенно новый для healpix и не понимаю, как это сделать. По сути, мне нужна сетка тета и phi, а затем хотелось бы использовать scipy.griddata для интерполяции. Благодарю.Угловой биннинг с использованием healpy
ответ
Вы можете просто использовать интерполяцию с 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)
Это было очень полезно, спасибо! – user6769140
у вас было смотреть на [numpy.histogram] (https://docs.scipy.org/ doc/numpy/reference/generated/numpy.histogram.html) – DrBwts