+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Python中的np.trapz计算

发布于2021-02-28 01:51     阅读(81)     评论(0)     点赞(17)     收藏(5)


0

1

2

3

4

我使用np.trapz来计算时间序列下的面积,该值似乎与我从手动计算中获得的值不同。

np.trapz 计算看起来像这样:

time_list, value_list = zip(*sorted(zip(time_list, value_list )))
area = np.trapz(value_list , dx= np.diff(time_list))
duration = (max(time_list) - min(time_list)).total_seconds()

try:
    mean= area/duration 
except Exception:
    mean= 'no value'

其中value_listtime_list是值和相应的时间戳,格式为datetime这给出0 days 01:46:19.320000了面积。

手动计算:

a = (pd.to_datetime('2001-01-04 03:59:29.960000') - pd.to_datetime('2001-01-04 03:58:41.960000')).total_seconds()
b = (pd.to_datetime('2001-01-04 03:59:31.960000') - pd.to_datetime('2001-01-04 03:59:29.960000')).total_seconds()
c = (pd.to_datetime('2001-01-04 03:59:34.120000') - pd.to_datetime('2001-01-04 03:59:31.960000')).total_seconds()
d = (pd.to_datetime('2001-01-04 03:59:36.120000') - pd.to_datetime('2001-01-04 03:59:34.120000')).total_seconds()
e = (pd.to_datetime('2001-01-04 04:01:12.680000') - pd.to_datetime('2001-01-04 03:59:36.120000')).total_seconds()

Area = (45.5+44)*e/2 + (44 + 43)*d/2 + (43 + 41.5)*c/2 + (41.5 + 38.5)*b + (38.5 + 36.5)*a/2

display(str(datetime.timedelta(seconds= Area)))

Area

得出6459.320000000001 seconds,等于1:47:39.320000面积。

本人确认的投入value_listtime_listnp.trapz是一样的手工计算,但为什么它们有什么不同?任何贡献表示赞赏。


解决方案


简单地说,顺序不正确。np.trapz计算:

(45.5+44)*a/2 + (44+43)*b/2 + ...

当你的公式是

(45.5+44)*e/2 + (44+43)*d/2 + ...

0

1

2

3

4

5

6

7



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/861634/56d82dd90212ecad3b1d/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

17 0
收藏该文
已收藏

评论内容:(最多支持255个字符)