Healpy query_polygon RuntimeError:未知异常

问题描述 投票:1回答:1

我正在使用healpy.query_polygon获取多边形内的healpix索引列表。根据文件:

顶点:包含多边形顶点的顶点数组,形状(N,3)。

但是当我尝试从以下多边形获取所有索引时,会出现RuntimeError: Unknown exception

在[1]:

import healpy as hp

vertex_array = np.array([[0.65, -0.04, 0.76], [0.58, 0.38, 0.72], [0.91, -0.29, 0.31],[0.91, 0.18, 0.38]])

print(vertex_array.shape)
vertex_array

出[1]:

(4, 3)
array([[ 0.65, -0.04,  0.76],
       [ 0.58,  0.38,  0.72],
       [ 0.91, -0.29,  0.31],
       [ 0.91,  0.18,  0.38]])

在[2]:

healpix_indexes_test = hp.query_polygon(4, vertex_array)

OUT [2]:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-63-5a14f69cb078> in <module>
----> 1 healpix_indexes_test = hp.query_polygon(4, vertex_array)

healpy/src/_query_disc.pyx in healpy._query_disc.query_polygon()

RuntimeError: Unknown exception

Here你可以看到躺在球体上的这些点的可视化。

只是为了好玩,我试图转置输入数组,所以它的形状变成了(3,4)。 Unknown exception问题消失了。但是像这样的输入与文档相矛盾,所以我不相信。

在[1]:

print(vertex_array.T.shape)
vertex_array.T

出[1]:

(3, 4)
array([[ 0.65,  0.58,  0.91,  0.91],
       [-0.04,  0.38, -0.29,  0.18],
       [ 0.76,  0.72,  0.31,  0.38]])

在[2]:

healpix_indexes_test_1 = hp.query_polygon(4, vertex_array.T)

healpix_indexes_test_1

OUT [2]:

array([ 42,  58,  75, 107, 123, 140])

我会很感激任何建议。

python astronomy healpy
1个回答
2
投票

在Github上使用Healpy成员的help,找到了解决方案。正确定义顶点的顺序很重要。在我的情况下,这意味着应该切换最后两个点的坐标以使矩形变得简单,而不是自交:

在[1]:

vertex_array_fixed = np.array([[0.65, -0.04, 0.76], [0.58, 0.38, 0.72], [0.91, 0.18, 0.38], [0.91, -0.29, 0.31]])

print(vertex_array_fixed.shape)
vertex_array_fixed

出[1]:

(4, 3)
array([[ 0.65, -0.04,  0.76],
       [ 0.58,  0.38,  0.72],
       [ 0.91,  0.18,  0.38],
       [ 0.91, -0.29,  0.31]])

在[2]:

healpix_indexes_test = hp.query_polygon(4, vertex_array_fixed)

healpix_indexes_test

OUT [2]:

array([24, 40, 71])

这是可视化:

在[3]:

Nside = 2048

healpix_indexes_test = hp.query_polygon(Nside, vertex_array_fixed)

healpix_indexes_test

出[3]:

array([ 5968575,  5968576,  5968577, ..., 17387119, 17387120, 17395310])

在[4]:

Npix = hp.nside2npix(Nside)

whole_map = np.arange(Npix, dtype=float)
whole_map[healpix_indexes_test] = hp.UNSEEN

hp.mollview(m, title="Fixed rectangle")

出[4]:Output plot

© www.soinside.com 2019 - 2024. All rights reserved.