创建时间序列#

初始化时间序列#

我们将在这里看到的第一种时间序列是 TimeSeries 对象,可用于在离散、瞬时时间对连续变量进行采样的时间序列。初始化 TimeSeries 初始化对象的方法与初始化对象的方法相同 Table 对象(参见 Data Tables ),但应指定与时间相关的其他参数。

均匀采样时间序列#

构造均匀采样的最方便方法 TimeSeries 指定开始时间、时间间隔和采样数:

>>> from astropy import units as u
>>> from astropy.timeseries import TimeSeries
>>> ts1 = TimeSeries(time_start='2016-03-22T12:30:31',
...                  time_delta=3 * u.s,
...                  n_samples=5)
>>> ts1
<TimeSeries length=5>
          time
          Time
-----------------------
2016-03-22T12:30:31.000
2016-03-22T12:30:34.000
2016-03-22T12:30:37.000
2016-03-22T12:30:40.000
2016-03-22T12:30:43.000

这个 time 关键字参数可以设置为可以传递给 Time 类(另请参见 Time and DatesTime 直接对象。注意 n_samples 只有在初始化期间不同时传递数据时才需要参数(请参见 Passing Data During Initialization

任意采样时间序列#

要构造具有任意时间采样的采样时间序列,可以多次传递到 time 论点:

>>> ts2 = TimeSeries(time=['2016-03-22T12:30:31',
...                        '2016-03-22T12:30:38',
...                        '2016-03-22T12:34:40'])
>>> ts2
<TimeSeries length=3>
          time
          Time
-----------------------
2016-03-22T12:30:31.000
2016-03-22T12:30:38.000
2016-03-22T12:34:40.000

也可以指定向量 Time 对象直接作为 time= 参数或向量 TimeDelta 的参数或数量数组 time_delta= 论证理由:

>>> TimeSeries(time_start="2011-01-01T00:00:00",
...            time_delta=[0.1, 0.2, 0.1, 0.3, 0.2]*u.s)
<TimeSeries length=5>
         time
         Time
-----------------------
2011-01-01T00:00:00.000
2011-01-01T00:00:00.100
2011-01-01T00:00:00.300
2011-01-01T00:00:00.400
2011-01-01T00:00:00.700

初始化二进制时间序列#

这个 BinnedTimeSeries 可用于表示时间序列,其中每个条目对应于在时间范围内进行的测量-例如,由binning X射线光子事件构建的光曲线。此类支持大小相等或不均匀的容器,以及连续和非连续的容器。至于 TimeSeries ,初始化 BinnedTimeSeries 可以用与初始化 Table 对象(参见 Data Tables ),但应指定与时间相关的其他参数,如下所述。

同等大小的连续料仓#

要创建具有相同大小连续存储单元的二进制时间序列,只需指定开始时间和存储单元大小即可:

>>> from astropy.timeseries import BinnedTimeSeries
>>> ts3 = BinnedTimeSeries(time_bin_start='2016-03-22T12:30:31',
...                        time_bin_size=3 * u.s, n_bins=10)
>>> ts3
<BinnedTimeSeries length=10>
    time_bin_start     time_bin_size
                             s
          Time             float64
----------------------- -------------
2016-03-22T12:30:31.000           3.0
2016-03-22T12:30:34.000           3.0
2016-03-22T12:30:37.000           3.0
2016-03-22T12:30:40.000           3.0
2016-03-22T12:30:43.000           3.0
2016-03-22T12:30:46.000           3.0
2016-03-22T12:30:49.000           3.0
2016-03-22T12:30:52.000           3.0
2016-03-22T12:30:55.000           3.0
2016-03-22T12:30:58.000           3.0

请注意 n_bins 只有在初始化期间不同时传递数据时才需要参数(请参见 Passing Data During Initialization

不均匀相邻料仓#

当创建具有不均匀连续存储箱的分箱时间序列时,可以更改存储箱大小以提供多个值(请注意,在本例中 n_bins 不需要)::

>>> ts4 = BinnedTimeSeries(time_bin_start='2016-03-22T12:30:31',
...                        time_bin_size=[3, 3, 2, 3] * u.s)
>>> ts4
<BinnedTimeSeries length=4>
     time_bin_start     time_bin_size
                              s
          Time             float64
----------------------- -------------
2016-03-22T12:30:31.000           3.0
2016-03-22T12:30:34.000           3.0
2016-03-22T12:30:37.000           2.0
2016-03-22T12:30:39.000           3.0

或者,您可以通过指定开始时间数组和单个结束时间来创建相同的时间序列:

>>> ts5 = BinnedTimeSeries(time_bin_start=['2016-03-22T12:30:31',
...                                        '2016-03-22T12:30:34',
...                                        '2016-03-22T12:30:37',
...                                        '2016-03-22T12:30:39'],
...                        time_bin_end='2016-03-22T12:30:42')
>>> ts5  
<BinnedTimeSeries length=4>
     time_bin_start        time_bin_size
                                s
         Time                float64
----------------------- -----------------
2016-03-22T12:30:31.000               3.0
2016-03-22T12:30:34.000               3.0
2016-03-22T12:30:37.000               2.0
2016-03-22T12:30:39.000               3.0

不均匀非连续料仓#

要创建具有非连续存储单元的二进制时间序列,可以指定开始时间和存储单元宽度的数组:

>>> ts6 = BinnedTimeSeries(time_bin_start=['2016-03-22T12:30:31',
...                                        '2016-03-22T12:30:38',
...                                        '2016-03-22T12:34:40'],
...                        time_bin_size=[5, 100, 2]*u.s)
>>> ts6
<BinnedTimeSeries length=3>
     time_bin_start     time_bin_size
                              s
          Time             float64
----------------------- -------------
2016-03-22T12:30:31.000           5.0
2016-03-22T12:30:38.000         100.0
2016-03-22T12:34:40.000           2.0

或者在最一般的情况下,也可以为 time_bin_starttime_bin_end ::

>>> ts7 = BinnedTimeSeries(time_bin_start=['2016-03-22T12:30:31',
...                                        '2016-03-22T12:30:33',
...                                        '2016-03-22T12:30:40'],
...                        time_bin_end=['2016-03-22T12:30:32',
...                                      '2016-03-22T12:30:35',
...                                      '2016-03-22T12:30:41'])
>>> ts7  
<BinnedTimeSeries length=3>
    time_bin_start        time_bin_size
                                s
          Time               float64
----------------------- ------------------
2016-03-22T12:30:31.000                1.0
2016-03-22T12:30:33.000                2.0
2016-03-22T12:30:40.000                1.0

向时间序列添加数据#

上面的示例演示了如何初始化 TimeSeries 对象,但这些对象不包括除时代之外的任何数据。添加数据有不同的方法,如 Table 班级。

初始化期间传递数据#

在初始化过程中可以传递数据 TimeSeries 对象,如 Table 物体。例如::

>>> ts8 = BinnedTimeSeries(time_bin_start=['2016-03-22T12:30:31',
...                                        '2016-03-22T12:30:34',
...                                        '2016-03-22T12:30:37',
...                                        '2016-03-22T12:30:39'],
...                        time_bin_end='2016-03-22T12:30:42',
...                        data={'flux': [1., 4., 5., 6.] * u.mJy})
>>> ts8  
<BinnedTimeSeries length=4>
      time_bin_start     time_bin_size     flux
                               s            mJy
          Time              float64       float64
----------------------- ----------------- -------
2016-03-22T12:30:31.000               3.0     1.0
2016-03-22T12:30:34.000               3.0     4.0
2016-03-22T12:30:37.000               2.0     5.0
2016-03-22T12:30:39.000               3.0     6.0

初始化后添加数据#

曾经一次 TimeSeries 对象已初始化,您可以像为 Table 对象:

>>> from astropy import units as u
>>> ts1['flux'] = [1., 4., 5., 6., 4.] * u.mJy
>>> ts1
<TimeSeries length=5>
          time            flux
                          mJy
          Time          float64
----------------------- -------
2016-03-22T12:30:31.000     1.0
2016-03-22T12:30:34.000     4.0
2016-03-22T12:30:37.000     5.0
2016-03-22T12:30:40.000     6.0
2016-03-22T12:30:43.000     4.0

添加行#

将行添加到 TimeSeriesBinnedTimeSeries 可以使用 add_row() 方法,如 TableQTable . 此方法使用字典,其中键是列名:

>>> ts8.add_row({'time_bin_start': '2016-03-22T12:30:44.000',
...              'time_bin_size': 2 * u.s,
...              'flux': 3 * u.mJy})
>>> ts8  
<BinnedTimeSeries length=5>
    time_bin_start       time_bin_size      flux
                                s           mJy
          Time               float64      float64
----------------------- ----------------- -------
2016-03-22T12:30:31.000               3.0     1.0
2016-03-22T12:30:34.000               3.0     4.0
2016-03-22T12:30:37.000               2.0     5.0
2016-03-22T12:30:39.000               3.0     6.0
2016-03-22T12:30:44.000               2.0     3.0

如果希望在添加行时跳过某些值,则应确保启用了遮罩-请参阅 时间序列中的掩蔽值 了解更多详细信息。