首页 > 解决方案 > bin光曲线后的Lightkurve nan值

问题描述

我正在使用带有 Python 3.8.5 和 astropy 4.2 的lightkurve 2.0.2 库来处理系外行星凌日。但是,当我想将光曲线合并到固定数量的点时,light_curve.flux除了前两个之外的所有值都是 nan。我做错了什么?

import lightkurve as lk

tp = lk.search_targetpixelfile("Kepler-10", mission="Kepler", exptime="long", quarter=1).download()
lc = tp.to_lightcurve().flatten().remove_outliers()
fold = lc.fold(0.837)
bin = fold.bin(n_bins=101)

print(bin.flux)  # [0.99999749 0.99999977 nan nan nan nan nan nan nan ... nan nan nan nan]

标签: pythonastropyastronomy

解决方案


在您的情况下,分箱是根据fold变量的时间数据完成的。让我们看一下数据:

print(fold)

# =>          time                flux        ... 
#                             electron / s    ... 
#     -------------------- ------------------ ... 
#     -0.41839904743025785 0.9999366372082438 ... 
#     -0.41790346068516393 0.9999900469016064 ... 
#     -0.41710349403700253  1.000098604170269 ... 
#                      ...                ... ... 
#      0.41749621545238175 1.0000351718333538 ... 
#       0.4178061659377394 1.0000272820282354 ... 
#      0.41829640771343823 1.0000199004079346 ...

这意味着我们有大约 -0.4 天到 0.4 天的数据。

然后使用bin = fold.bin(n_bins=101). 关于bin方法参数的文档(截断):

   time_bin_size : `~astropy.units.Quantity`, float
       The time interval for the binned time series.
       (Default: 0.5 days; default unit: days.)
   time_bin_start : `~astropy.time.Time`, optional
       The start time for the binned time series. Defaults to the first
       time in the sampled time series.
   n_bins : int, optional
       The number of bins to use. Defaults to the number needed to fit all
       the original points. Note that this will create this number of bins
       of length ``time_bin_size`` independent of the lightkurve length.

你只传递n_bins参数。这意味着,该方法将从 -0.4 开始创建 101 个宽度为 0.5 的 bin。所以第一个 bin 从 -0.4 到 0.1,第二个从 0.1 到 0.6,第三个从 0.6 到 1.1,...

现在很明显,只有前两个 bin 包含数据。

而不是n_bins,使用bins

   bins : int
       The number of bins to divide the lightkurve into. In contrast to
       ``n_bins`` this sets the length of ``time_bin_size`` accordingly.

这是结果:

bin = fold.bin(bins=101)
print(bin.flux) 

# => [1.0000268  1.00003322 1.00001914 1.00001018 1.00000905 1.00002073
#     0.99999502 1.00000155 1.0000071  0.99999901 1.000028   0.99998768
#     0.99998992 1.00003623 1.00001132 1.00005118 0.99998819 1.00001886
#     ...
#     1.00001082 1.00004898 1.0000009  1.00001234 1.00000681] electron / s

bins参数在 lightkurve 2.0.2 中不可用,但在 2.0.6 中(感谢@Michal)。


推荐阅读