NumPy - 日期时间的向量化运算
NumPy 日期时间的向量化运算
NumPy 中的向量化运算允许您对整个数据数组执行运算,而无需显式循环。
处理日期时间数据时,NumPy 的向量化运算使您能够一次性对整个日期时间值数组执行基于时间的计算,而无需手动迭代每个元素。
使用 datetime64 类型,您可以对日期时间数组执行各种算术和比较运算,例如加减时间间隔、比较日期或执行条件运算。
加减时间间隔
对日期时间数据最常见的运算之一是加减时间间隔。 NumPy 允许您以矢量化的方式执行这些操作,这意味着您可以一次性从整个日期时间值数组中添加或减去时间增量。
要添加或减去时间间隔,您可以使用 timedelta64 对象,它表示时间差。此对象可以添加到 datetime64 对象或从中减去,从而按指定的间隔移动日期或时间。
示例
在此示例中,我们将为 datetime 数组中的每个日期添加 5 天 -
import numpy as np # 定义一个 datetime 数组 dates = np.array(['2024-01-01', '2024-01-02', '2024-01-03'], dtype='datetime64[D]') # 定义一个 5 天的时间差 time_delta = np.timedelta64(5, 'D') # 将时间差添加到 datetime 数组 new_dates = dates + time_delta print(new_dates)
以下是得到的输出 -
['2024-01-06' '2024-01-07' '2024-01-08']
日期相减并计算差值
另一个常见操作是计算两个日期之间的差值,其结果是一个 timedelta64 对象。当您需要计算两个时间点之间的时间差(例如两个日期之间的天数)时,这非常有用。
在 NumPy 中,您可以将一个日期时间数组与另一个日期时间数组相减,得到一个时间差数组,表示数组中对应日期之间的差值。
示例
在此示例中,我们计算日期时间数组中两个日期之间的差值 -
import numpy as np # 定义两个日期时间数组 dates1 = np.array(['2024-01-01', '2024-01-02', '2024-01-03'], dtype='datetime64[D]') dates2 = np.array(['2024-01-04', '2024-01-05', '2024-01-06'], dtype='datetime64[D]') # 将数组相减得到差值 time_diff = dates2 - dates1 print(time_diff)
输出将显示以天数为单位的差值 -
[3 3 3]
以向量化方式比较日期
NumPy 允许您在日期时间数组之间执行逐元素比较,从而让您能够根据时间条件过滤或分析数据。向量化比较运算可用于将日期时间值与固定时间点进行比较,或将日期时间值相互比较。
您可以使用标准比较运算符比较日期时间数组,例如 >、<、>=、<=、== 和 !=,这些运算符返回一个布尔值数组,指示每个元素是否满足条件。
示例
在此示例中,我们使用向量化比较来过滤大于特定日期的日期 -
import numpy as np # 定义日期时间数组 dates = np.array(['2024-01-01', '2024-01-02', '2024-01-03'], dtype='datetime64[D]') # 定义过滤条件(大于 '2024-01-02' 的日期) filtered_dates = dates[dates > np.datetime64('2024-01-02')] print(filtered_dates)
这将产生以下结果 -
['2024-01-03']
使用 Timedelta 数组进行矢量化运算
除了使用日期时间数组之外,您还可以使用 timedelta64 数组执行矢量化运算,这些数组表示日期时间值之间的差异。这些操作在处理持续时间或时间间隔时非常有用。
您可以对 timedelta 数组执行算术运算(例如加法或减法),以计算多个时间间隔之间的总持续时间,或者将它们与其他时间间隔进行比较。
示例
在此示例中,我们将两个 timedelta 数组相加以获取总持续时间 -
import numpy as np # 定义两个 timedelta 数组 delta1 = np.array([np.timedelta64(5, 'D'), np.timedelta64(10, 'D')], dtype='timedelta64[D]') delta2 = np.array([np.timedelta64(2, 'D'), np.timedelta64(3, 'D')], dtype='timedelta64[D]') # 添加 timedelta 数组 total_delta = delta1 + delta2 print(total_delta)
以下是上述代码的输出 -
[ 7 13]
使用不同的时间单位
NumPy 支持多种时间单位,包括年、月、日、时、分和秒。您可以根据需要对跨不同时间单位的日期时间数组执行向量化操作。
这在处理跨越多个时间尺度的数据或需要在不同单位之间转换时尤其有用。
示例
在此示例中,我们使用具有不同时间单位的日期时间数组和时间增量数组 -
import numpy as np # 定义日期时间数组 dates = np.array(['2024-01-01', '2024-01-02', '2024-01-03'], dtype='datetime64[D]') # 定义包含小时数的时间增量数组 timedelta = np.array([np.timedelta64(10, 'h'), np.timedelta64(5, 'h'), np.timedelta64(20, 'h')]) # 将 timedelta 数组添加到 datetime 数组 new_dates = dates + timedelta print(new_dates)
执行上述代码后,我们得到以下输出 -
['2024-01-01T10' '2024-01-02T05' '2024-01-03T20']