0

我正在尝试将源自椭圆等光度拟合的等光度列表的 QTable 对象保存到任何文件类型(.txt、.csv 等),让我只需将其加载回脚本而无需清理它或任何一种。

  • QTable 创建如下:
example_isolist = ellipse_example.fit_image(sclip=3., nclip=3) #performing elliptical isophote fit and creating the Isophote list
example_isolist_tab = example_isolist.to_table() #converting to QTable
  • 我的尝试:
import json
with open("example_isolist_tab.txt", 'w') as f:
    json.dump(example_isolist_tab, f, indent=2)

在这里使用 json 不起作用。出现以下错误:

TypeError: Object of type QTable is not JSON serializable

这里的任何人都有过 photutils 数据处理或将 isoophote 保存到文件的经验吗?这真的应该是一件非常简单的事情,只是一种方式,这样我就不必每次想要使用等光度拟合的结果时都重新运行整个脚本。我的整个数据集包含 26 张图像,这意味着大约需要 2.5 小时的计算时间,而不会在两者之间进行保存。

提前致谢!

4

2 回答 2

1

使用 astropy ECSV编写器QTable无损地编写:

>>> example_isolist_tab.write('example_isolist_tab.ecsv')
>>> t = QTable.read('example_isolist_tab.ecsv')  # returns the same table
于 2021-04-19T09:47:30.427 回答
1

Astropy 已经有许多用于保存表格的内置格式Table.write

QTable特别是,如果您想要一个可往返的基于文本的格式,强烈建议使用ECSV格式,因为它还输出有关每列类型和单位的元数据。如果您使用.ecsv扩展名命名文件,则会自动使用此格式。例如:

>>> from astropy.table import QTable
>>> import astropy.units as u
>>> import numpy as np

>>> a = np.array([1, 4, 5], dtype=np.int32)
>>> b = [2.0, 5.0, 8.5]
>>> c = ['x', 'y', 'z']
>>> d = [10, 20, 30] * u.m / u.s

>>> t = QTable([a, b, c, d],
...            names=('a', 'b', 'c', 'd'),
...            meta={'name': 'first table'})

>>> t.write('table.ecsv')
>>>  print(open('table.ecsv').read())
# %ECSV 0.9
# ---
# datatype:
# - {name: a, datatype: int32}
# - {name: b, datatype: float64}
# - {name: c, datatype: string}
# - {name: d, unit: m / s, datatype: float64}
# meta:
#   __serialized_columns__:
#     d:
#       __class__: astropy.units.quantity.Quantity
#       unit: !astropy.units.Unit {unit: m / s}
#       value: !astropy.table.SerializedColumn {name: d}
#   name: first table
# schema: astropy-2.0
a b c d
1 2.0 x 10.0
4 5.0 y 20.0
5 8.5 z 30.0

>>> QTable.read('table.ecsv')
<QTable length=3>
  a      b     c      d   
                    m / s 
int32 float64 str1 float64
----- ------- ---- -------
    1     2.0    x    10.0
    4     5.0    y    20.0
    5     8.5    z    30.0
于 2021-04-19T09:45:20.457 回答