python - Healpy query_polygon运行时错误: Unknown exception

标签 python astronomy healpy

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

vertices: Vertex array containing the vertices of the polygon, shape (N, 3).

但是当我尝试从以下多边形获取所有索引时,出现RuntimeError:未知异常:

在[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)

输出[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)。 未知异常问题消失了。但这样的输入与文档相矛盾,所以我不相信。

在[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

输出[2]:

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

如果有任何建议,我将不胜感激。

最佳答案

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

在[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

输出[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

关于python - Healpy query_polygon运行时错误: Unknown exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55548719/

相关文章:

python - 在healpy map 中进行分箱?

python - Python 中的函数将列表视为全局变量。如何解决这个问题?

python - 访问全局变量时模块的 __setattr__ 和 __getattr__

javascript - B-V 转换为开尔文公式

python - 如何使用 Astropy/Astroquery 获取 Sloan 量级

python - 在healpy mollview中自定义颜色条

python - pip install -e 开发环境的本地git分支

python - 为什么 numpy.linalg.solve() 提供比 numpy.linalg.inv() 更精确的矩阵求逆?

python - AstroPy距离红移转换精度

python - 如何在 for 循环中使用多重处理?如何让一个核心运行从索引n1到n2的循环,另一个核心从索引n2到n3运行循环?