---
title: "用二十四颗 Gaia 恒星比较两种距离估计"
description: "离线重跑 Gaia DR3 小样本，保留负视差，重建五参数协方差，比较视差倒数和带先验的距离区间。"
canonical_url: "https://sandboxphysics.com/zh/stories/astrometry/gaia-distance-tutorial/"
language: "zh-CN"
page_type: "story"
alternate_languages:
  en: "https://sandboxphysics.com/stories/astrometry/gaia-distance-tutorial/"
last_modified: "2026-10-28"
---

[测出星空的深度](https://sandboxphysics.com/zh/stories/astrometry/)

L3 · 恒星天体测量

# 用二十四颗 Gaia 恒星比较两种距离估计

Sandbox Physics · 2026-10-28

打开随页提供的 Gaia DR3 星表小样本和 Python 脚本。完成后，你能把二十四行真实视差转换成距离分布，保留其中三颗负视差源，并看到先验怎样影响较弱的测量。

## 开始前需要什么

先读视差几何与五参数拟合两章。脚本只用 Python 3.10 以上的标准库。这里读取的是星表参数，不是 Gaia 的逐次原始观测；浏览器里的带噪轨迹另行模拟。

## 先固定数据，而不是每次重查天空

输入文件叫 gaia-dr3-sample.csv，下载于二〇二六年十月二十八日。数据来自 ARI 的 Gaia TAP 服务，并与 ESA 服务返回的同一查询交叉检查。query.adql 保存查询：在固定源编号区间内，按源编号取前二十四个具有五参数解的源。没有按视差正负或 RUWE 删行。

这种取法是为了得到一个小而确定的练习样本，不能用来估计银河恒星数量、距离分布或负视差的总体比例。样本包含三行负视差；它们从输入一路保留到输出。

先把 CSV、脚本和随页的来源说明下载到一个目录。输入的 SHA-256 校验值保存在 provenance.json 和结果文件中。脚本也会检查行数、负视差数量及五参数协方差的正定性。

```
                    python3 reproduce-gaia-distances.py --data-dir . --check
# In the repository checkout:
python3 scripts/astronomy/ac01/reproduce-gaia-distances.py
python3 scripts/astronomy/ac01/reproduce-gaia-distances.py --check
                  
```

对应阅读：ARI Gaia Services — TAP documentation · Lindegren et al.

## 星表的一行里，有数值，也有它们的关联

source\_id 是标识符，请按字符串保存。它的位数很多，不能交给精度不足的浮点类型。ra 和 dec 是国际天球参考系中的方向角，以度计，参考历元为 J2016.0。parallax 及其误差用毫角秒；pmra、pmdec 用毫角秒每年。

pmra 已含赤纬余弦因子。ra\_error 描述切向位置误差 $\alpha_*$，也用毫角秒；不能直接与以度计的赤经数值相加。十个相关系数配合五个标准差，可重建完整五参数协方差矩阵。

例如东向位置传播二十年后的方差，要把位置误差、二十倍自行误差，以及两者的交叉项都算进去。输出同时保存完整结果和忽略相关后的结果。比较二者，可以看到“只留对角线”到底改变了多少。这里只做线性切向传播，不加入径向加速。

$$
K_{ij}=\rho_{ij}\sigma_i\sigma_j,\qquad\operatorname{Var}(x_{2036})=K_{00}+40K_{03}+400K_{33}
$$

位置与自行的相关项可能为正，也可能为负；它会增加或减少传播后的不确定度。这里的二十年从 J2016.0 算到 J2036.0。

对应阅读：Lindegren et al.

## 高信噪比下，先试一次倒数

源 3200000263315829632 的测得视差约为 $5.56170\pm0.04595\,\mathrm{mas}$。直接倒数给约一百七十九点八秒差距。误差相对视差很小，先验选择对这颗源的距离结果影响也小。

另一颗源 3200000224659857664 只有 $0.04374\pm0.12633\,\mathrm{mas}$。直接倒数会给出约二万二千八百六十秒差距。这个数看起来精确，其实对视差的微小变化极其敏感：把测量稍稍推到零，倒数就发散，推过零又会变号。

遇到后一种测量，要直接在视差空间描述噪声。给定一个正距离，预测视差，再问这种带误差测量有多可能出现。这个“给定参数时观测的概率密度”叫似然。

对应阅读：Bailer-Jones

## 给每个正距离一个权重，再看先验敏感性

脚本采用一个便于检验的教学先验：距离密度正比于 $r^2e^{-r/L}$。平方项来自球壳体积，指数项让很远距离的权重逐渐衰减。它不是二〇二一年 Bailer-Jones 距离星表所用的方向相关银河模型。

把先验与高斯视差似然相乘，再归一化，就得到后验距离分布。脚本分别取 $L=500,1350,3000\,\mathrm{pc}$，保存每一组的百分之十六、中位数和百分之八十四分位点。分位点是累计概率到指定比例时的距离，可以保留分布的不对称性。

脚本在对数距离网格上求积。网格间隔相同不表示每格有相同距离宽度，因此积分权重必须包含 $dr=r\,d\log r$。漏掉这个因子会悄悄换成另一套先验。

$$
p(r\mid\widehat\varpi,\sigma,L)\propto r^2e^{-r/L}\exp\!\left[-\frac{(\widehat\varpi-1000/r)^2}{2\sigma^2}\right],\qquad r>0
$$

距离以秒差距计，视差和标准差以毫角秒计。当前教程没有施加视差零点修正，结果用来说明推断方法，不作为经过校准的科学距离星表。

对应阅读：Bailer-Jones · Bailer-Jones et al. · Lindegren et al.

## 检查负视差和三维位置输出

源 3200000259019600000 的测得视差约为负零点一三一毫角秒，标准差约零点四二五毫角秒。脚本给它的倒数距离填空值，仍照常计算正距离后验。在尺度一千三百五十秒差距的教学先验下，中位数约四千四百六十三秒差距，中央百分之六十八区间约二千七百四十一至七千零六十秒差距。换先验尺度时，这个结果会明显移动。

输出还把每颗源的后验距离中位数沿其 ICRS 方向投成三个空间坐标。它们是所选径向中位数对应的位置，不是无误差真值，也不是三维联合分布的完整描述。需要总体地图时，应保留距离分布和观测选择，而不只画二十四个点。

最后运行 --check。它会将重算结果与冻结结果逐字比较，并把网格点数减半检查数值收敛。在测量几乎没有信息的极限，后验应退回形状参数为三的 Gamma 分布；脚本用该分布的解析累计概率独立检查分位点。

换到另一份 Gaia 数据时，先检查版本、历元、单位和参数解类型；再看协方差、零点修正的适用范围和选择条件。距离图上的一点，背后始终连着这些信息。

对应阅读：Bailer-Jones · Lindegren et al.

## 下载冻结的练习文件

上面的命令在仓库根目录运行。相同的输入、输出、来源说明和源脚本也可以在这里查看。

- [Gaia DR3 CSV](https://sandboxphysics.com/stories/astrometry/gaia-dr3-sample.csv)
- [复算距离结果](https://sandboxphysics.com/stories/astrometry/distance-results.json)
- [来源与校验值](https://sandboxphysics.com/stories/astrometry/provenance.json)
- [固定查询](https://sandboxphysics.com/stories/astrometry/query.adql)
- [Python 源码](https://sandboxphysics.com/stories/astrometry/reproduce-gaia-distances.py)

## 亲手试一试

### [在模拟里辨认对应的测量困难](https://sandboxphysics.com/zh/labs/stellar-parallax-proper-motion/)

1. 比较近星和“噪声里的摇摆”，看相同观测日期下，视差相对噪声怎样缩小。
2. 导出模拟轨迹，分清它的逐次位置协方差与真实 Gaia CSV 里的五参数协方差。

## 练习与答案

为什么要保留三行负视差，而不先删掉再分析？

视差的正负本身受测量噪声影响。按符号删行会选择性丢掉向负方向偏的测量，改变样本。距离推断可以在保持距离为正的同时使用负视差似然。

把长度尺度改变后，弱视差源的中位距离明显变化，下一步该怎样解释？

说明当前数据对距离约束较弱，先验对结果影响较大。应报告这种敏感性，并寻找适用的方向相关先验、光度信息或其他独立数据；选用哪个结果，应由样本和观测依据决定。

[上一篇：从带噪位置里分出视差和自行](https://sandboxphysics.com/zh/stories/astrometry/five-parameter-fit/) [下一篇：沿着 Gaia 原论文读懂视差零点和扫描误差](https://sandboxphysics.com/zh/stories/astrometry/reading-gaia-systematics/)

## 来源与计算范围

1. [Lindegren et al., Gaia EDR3 — The astrometric solution, arXiv:2012.03380v1](https://arxiv.org/html/2012.03380v1)

   第 3.1、5.3 至 5.7 节，公式二十三、图十至十二。核读固定版本的源模型与协方差约定；DR3 基础天体测量继承 EDR3。

2. [Bailer-Jones, Estimating distances from parallaxes, arXiv:1507.02105v1](https://arxiv.org/html/1507.02105v1)

   第 2、3、7 节及公式一、四、十七、十八：高斯视差似然与指数衰减空间密度先验。教程将其作为便于检验的教学先验。

3. [Bailer-Jones et al., Estimating distances from parallaxes V, arXiv:2012.05220v1](https://arxiv.org/html/2012.05220v1)

   第 II.1 至 II.3、V.2、V.5 节。论文的方向相关银河先验与本教程简单的指数衰减先验不同。

4. [Lindegren et al., Parallax bias versus magnitude, colour, and position, arXiv:2012.01742v2](https://arxiv.org/html/2012.01742v2)

   第 2.3、4.1、8 节，图二、五、二十一、二十二与表九、十。教程未施加零点修正，不称作经过校准的距离星表。

5. [ARI Gaia Services — TAP documentation](https://gaia.ari.uni-heidelberg.de/help.html)

   对 gaiadr3.gaia\_source 发起同步 CSV 查询。二〇二六年十月二十八日冻结查询、源编号、原始 CSV 和校验值。
