创建时间序列#
初始化时间序列#
我们将在这里看到的第一种时间序列是 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 Dates 或 Time
直接对象。注意 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_start
和 time_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
添加行#
将行添加到 TimeSeries
或 BinnedTimeSeries
可以使用 add_row()
方法,如 Table
和 QTable
. 此方法使用字典,其中键是列名:
>>> 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
如果希望在添加行时跳过某些值,则应确保启用了遮罩-请参阅 时间序列中的掩蔽值 了解更多详细信息。