gpt4 book ai didi

python - 高效地将 Astropy SkyCoord 数组导出到数组/DataFrame/文件

转载 作者:行者123 更新时间:2023-11-30 21:53:28 26 4
gpt4 key购买 nike

天体坐标已被证明是在 ICRS 和银河系之间转换的非常快速的方法。我的问题是关于将 SkyCoord 数组写入文本文件,可能使用 Numpy 数组或 Pandas DataFrame 作为中介。我的数组相当大(~100K 坐标),因此效率很高。

SkyCoord 类中似乎没有任何方法可以将 RA/Dec 导出为任何 Python 内置数据结构。我探索过的一种可能的途径是为坐标创建 Astropy QTable(将它们添加为字符串),但这很慢,并且需要额外的处理来分离和清理坐标字符串。

例如

import numpy as np
import pandas as pd
from astropy import units as u
from astropy.coordinates import SkyCoord
from astropy.io import ascii
from astropy.table import QTable

if __name__ == "__main__":
RA = np.array([0.819853, 0.0920091, 1.04977])
DEC = np.array([-30.8484, -30.671, -31.0921])

c = SkyCoord(ra=RA * u.degree, dec=DEC * u.degree, frame="icrs")
c_galactic = c.galactic

table = QTable([c_galactic], names=["skycoord"])
ascii.write(
table, "gal_coords.csv", format="csv", fast_writer=False, overwrite=True
)

任何关于实现这一目标的最佳方法的建议都将非常受欢迎。如果该解决方案可以推广到将 SkyCoord 数组转换为其他数据结构,我希望它对更广泛的社区有用。

最佳答案

Astropy 具有内置功能,可以使用 ECSV format 将表中的坐标列导出到 CSV。 ,请参见下面的示例。这会自动生成与具有相关坐标属性的原始列相对应的列名称,在本例中,lb 代表 Gactic。

ECSV 是 CSV 的扩展,它在文件开头的注释文本中包含元数据,以完全指定列数据并允许数据无损往返。但重要的是,您可以使用任何 CSV 阅读器(不仅仅是 astropy)来阅读此内容,只需指定 # 为注释(例如 pandas.read_csv(..., comment='#').

>>> RA = np.array([0.819853, 0.0920091, 1.04977])
... DEC = np.array([-30.8484, -30.671, -31.0921])
...
... c = SkyCoord(ra=RA * u.degree, dec=DEC * u.degree, frame="icrs")
... c_galactic = c.transform_to("galactic")
...
>>> t = QTable([c_galactic], names=["skycoord"])
>>> t.write('skycoord.ecsv')
>>> cat skycoord.ecsv
# %ECSV 0.9
# ---
# datatype:
# - {name: skycoord.l, unit: deg, datatype: float64}
# - {name: skycoord.b, unit: deg, datatype: float64}
# meta: !!omap
# - __serialized_columns__:
# skycoord:
# __class__: astropy.coordinates.sky_coordinate.SkyCoord
# ...
# schema: astropy-2.0
skycoord.l skycoord.b
10.618564158206215 -78.83862258651922
12.320325970465513 -78.28290679292496
9.106328561289311 -78.95458548581124

>>> pd.read_csv('skycoord.ecsv', comment='#')
skycoord.l skycoord.b
0 10.618564158206215 -78.83862258651922
1 12.320325970465513 -78.28290679292496
2 9.106328561289311 -78.95458548581124

关于python - 高效地将 Astropy SkyCoord 数组导出到数组/DataFrame/文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59661263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com