【问题标题】:Binning in healpy maps?在healpy地图中分箱?
【发布时间】:2019-06-19 13:57:17
【问题描述】:

我有一张健康地图,其中每个像素值都是一些有意义的物理测量值。我想将地图分成边长为 5 度的“正方形”。基本上我想平均每个 5 deg^2 bin 中的像素值。有什么直接的方法吗?

【问题讨论】:

  • 您想以 HEALPIx 格式保存数据吗?在这种情况下,hp.ud_grade() 将完全满足您的需求。需要注意的是,您不能选择任意正方形,但需要坚持(二次和旋转)HEALPix 像素。
  • 是的,这是真的,希望我应该更具体。我还想获取每个 bin 内所有点的方差。所以使用 hp.ud_grade() 只会帮助我计算平均值,而不是方差。

标签: python astronomy healpy


【解决方案1】:

您可以使用 heappy 支持环和嵌套排序的事实来实现这一点。对于每个分辨率步骤,四个高分辨率像素构成一个低分辨率像素。

  import healpy as hp
  import numpy as np

  nside_high = 2
  npix_high = hp.nside2npix(nside_high)
  arr = np.arange(npix_high)

  hp.mollview(arr)

现在,使用嵌套排序,我们可以计算每个低分辨率像素的平均值。这相当于使用hp.ud_grade(arr, nside_low)

  nside_low = 1
  order_diff = nside_high - nside_low

  arr_lowres = hp.reorder(arr, r2n=True).reshape((-1, 4**order_diff)).mean(axis=1)
  hp.mollview(arr_lowres, nest=True)

最后,我们可以将mean 替换为std 以获得标准差:

  arr_std = hp.reorder(arr, r2n=True).reshape((-1, 4**order_diff)).std(axis=1)
  hp.mollview(arr_std, nest=True)

【讨论】:

  • 这很聪明,但理想情况下,我希望在每个 bin 的高分辨率地图中都有一个像素列表。虽然您的方法允许我计算 bin 的标准 dev 和 avg,但我也不会循环遍历每个 bin 中的像素。我不认为这种方法允许我这样做。有什么想法可以获取每个 bin 的高分辨率地图中的像素列表吗?
  • 当然,这正是hp.reorder(arr, r2n=True).reshape((-1, 4**order_diff)) 在上面的代码中所做的:) 它会给你一个二维的numpy数组,shape=(n_large_pixels, n_small_pixels_per_large_pixel)
猜你喜欢
  • 1970-01-01
  • 2016-04-10
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
相关资源
最近更新 更多