每年十二月一月份的平均日数

2024-10-03 04:33:50 发布

您现在位置:Python中文网/ 问答频道 /正文

想象一下,时间序列在12月底/1月初周期性地达到峰值。序列的最大值将具有如下dt1或{}中所示的日期。我需要计算一年中的平均日数。在

问题是,对于dt1(211)和dt2(356),一个正常的平均值会给出非常不同的结果。原因很明显是dt1的一些元素在1月份,因此相应的doy非常小,从而导致平均值下降。在

我最初是用另一个月作为原点来计算DOYs,但这给新原点周围的其他时间序列带来了问题。在

这一问题是否有一个全年通用的解决办法?在

dt1 = [datetime(2000, 12, 15), datetime(2001, 12, 16), datetime(2002,12,20), datetime(2004,1,2) , datetime(2005,1,1)]
dt2 = [datetime(2000, 12, 15), datetime(2001, 12, 16), datetime(2002,12,20), datetime(2003,12,31), datetime(2004,12,30)]
doys1 = np.array([dt.timetuple().tm_yday for dt in dt1])
doys2 = np.array([dt.timetuple().tm_yday for dt in dt2])
print doys1.mean()
print doys2.mean()

谢谢!在


Tags: fordatetimenp时间dt序列arraytm
1条回答
网友
1楼 · 发布于 2024-10-03 04:33:50

经过一点谷歌搜索,我发现你要找的是一种计算mean of circular quantities的方法。更多的google发现这是在^{} library中实现的。我找到它要感谢this answer,但是我在尝试找到关于函数本身的一些适当的文档时失败了,并返回到检查source code以找出应该如何调用它。在

>>> import numpy as np
>>> from scipy import stats
>>> from datetime import datetime
>>> 
>>> dt1 = [datetime(2000, 12, 15), datetime(2001, 12, 16), datetime(2002,12,20), datetime(2004,1,2) , datetime(2005,1,1)]
>>> dt2 = [datetime(2000, 12, 15), datetime(2001, 12, 16), datetime(2002,12,20), datetime(2003,12,31), datetime(2004,12,30)]
>>> doys1 = np.array([dt.timetuple().tm_yday for dt in dt1])
>>> doys2 = np.array([dt.timetuple().tm_yday for dt in dt2])
>>>
>>> stats.circmean(doys1, high=365)
357.39332727199502
>>> stats.circmean(doys2, high=365)
356.79551148217894

相关问题 更多 >