使用Python,我必须处理一些数据。

在大约一千万个时间点,我得到了大约50个函数的值。这些值以2D列表形式给出matrix,即matrix[i]是值列表

[t_i, value of f1 at t_i, value of f2 at t_i ..., value of fN of t_i]

在哪里N = 50。

由于

数据中可能的噪声(功能为一些测量值)

非等时的时间点(有时,时间步长为几秒钟,但有时可以以天为单位)

我决定使用在固定长度的一些预定义时间间隔上给定值的平均值的值。

我尝试了不同长度的间隔:它们介于一分钟到一小时之间。

我计算平均值的算法如下:

matrix=...# read matrixt0=matrix[0][0]ts_new=[t0+i*time_stepforiinrange(some_bound)]buckets=[[]fortints_new]fori,instanceinenumerate(matrix):t_i=instance[0]put i to the bucketwithindex j,such that ts_new[j]<=t_i

该算法的瓶颈是最后一个for循环。

如果我转换matrix成numpy.array与计算的平均值bucket为matrix[bucket, :].mean(axis=0),蛮快的这个作品,但是计算的值没有太大的意义:

如果f1at的值ts = [0, 99, 100]分别为ys = [0, 0, 2],则均值函数将返回2/3(按预期)。但是,的平均值f1应该更接近0。使用梯形法则,将获得的平均值0.01,这更有意义。

所以,目前,我正在使用

所述scipy.integrate.trapz用于计算平均值的桶的方法,包括:梯形的面积由间隔长度除以

scipy.interpolate.interp1d一种获取f间隔边界处的函数值的方法,例如,我使用上一个存储桶中的最后一个点和给定存储桶中的第一个点,以计算相应时间间隔开始时的值(对于结束时间类似)时间间隔)

需要第二个项目符号,因为分钟间隔时间太短,以至于有时存储桶中只有1或2个点。该过程如下:

# for one bucketmeans=[0forcolinrange(N)]forcolinrange(1,N+1):# for each function fxs=[]ys=[]ifcan_interpolate_at_start:f_lin=scipy.interpolate.interp1d([tPrevLast,tNowFirst],[yPrevLast,yNowFirst])xs.append(t_bucketStart)ys.append(f_lin(t_bucketStart))xs+=matrix[bucket,0]ys+=matrix[bucket,col]ifcan_interpolate_at_end:# ...means[col-1]=scipy.integrate.trapz(ys,xs)/(xs[-1]-xs[0])

的值can_interpolate_at_start与can_interpolate_at_end仅取决于时间差距(但必须特别注意采取的第一个和最后一个桶...):我不使用插值点,如果在之前的桶之间,例如,最近点的时间差并且当前存储桶太大。

我的问题是:当前的方法确实很慢(每隔一分钟的时间间隔大约两个小时)。我怎样才能使其更快?

解决方案

您可以做的一件简单的事情是,根据间隔进行思考,取每个间隔的每个函数的平均值,然后乘以间隔长度,然后除以总时间:

importnumpyasnp

matrix=...data=np.asarray(matrix)t_diff=np.diff(data[:,0])means_sum=np.sum(t_diff[:,np.newaxis]*(data[:-1,1:]+data[1:,1:])/2,axis=0)means=means_sum/(data[-1,0]-data[0,0])

python求梯形面积_Python:使用梯形法则快速计算平均值相关推荐

  1. python求素数算法_Python程序最多可计算n个质数(使用不同算法)

    python求素数算法 There are various methods through which we can calculate prime numbers upto n. 我们可以通过多种方 ...

  2. python求平行四边形面积_python 已知平行四边形三个点,求第四个点的案例

    我就废话不多说了,大家还是直接看代码吧! import numpy as np #已知平行四边形三个点,求第四个点 #计算两点之间的距离 def CalcEuclideanDistance(point ...

  3. python求扇形面积_Python随机生成均匀分布在单位圆内的点代码示例

    Python有一随机函数可以产生[0,1)区间内的随机数,但是如果我们想生成随机分布在单位圆上的,那么我们可以首先生成随机分布在单位圆边上的点,然后随机调整每个点距离原点的距离,但是我们发现这个距离不 ...

  4. python求梯形面积_pythonocc 求一条直线与一个梯形的交点的横坐标

    坐标系为ZOX坐标系,X轴为横轴,Y轴为竖轴.直线为平行于X轴的一条直线.梯形为以Z轴为对称轴的梯形.附上代码. # -*- coding: utf-8 -*- """ ...

  5. python求矩形面积_python实验:矩形面积

    排名 用户 运行时间 内存使用 代码长度 语言 提交时间 1 46MS 3932K 31Byte Python3 2020-06-03 11:06:05.0 2 46MS 3960K 39Byte P ...

  6. python求线段长度_python微元法计算函数曲线长度的方法

    计算曲线长度,根据线积分公式: ,令积分函数f(x,y,z) 为1,即计算曲线的长度,将其微元化: 其中 根据此时便可在python编程实现,给出4个例子,代码中已有详细注释,不再赘述 ''' 计算曲 ...

  7. 零起点学算法11——求梯形面积

    零起点学算法11--求梯形面积 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lld Description 水题 Input ...

  8. c语言习题 定义函数 areaT,功能是求梯形面积。要求在主函数中输入上底(用变量 a存储)、下底(用变量 b 存储)、和高(用变量 h 存储),在主函数中调用函数 areaT,输出梯形面积(用变量

    定义函数 areaT,功能是求梯形面积.要求在主函数中输入上底(用变量 a存储).下底(用变量 b 存储).和高(用变量 h 存储),在主函数中调用函数 areaT,输出梯形面积(用变量 s 存储)的 ...

  9. python求三角形面积

    运用Python求三角形面积,代码如下 在运行后,可得 输入三边长后通过三角形面积公式,可求得三角形的面积,其中需要得知三角形如何运用周长求面积,周长公式为s = (a + b + c) / 2,后用 ...

最新文章

  1. java实现时间的比较
  2. SmartFoxServer学习总结(转载)
  3. 记录关于vs2008 和vs2015 的报错问题
  4. 提出建议Do you want to..._44
  5. html加载富文本_Uniapp基础实战富文本框解析 WordPress rest api实例
  6. 水凝胶 静电纺丝_离子液体/水和静电纺丝条件对聚偏氟乙烯纳米纤维晶体结构的影响...
  7. 【Windows】添加开机启动项
  8. C语言 同构数的算法
  9. 使用WebService获取第三方服务数据
  10. 【mysql】浮点类型
  11. 亮瞎眼的十六进制颜色代码表
  12. 666RPG(计数dp)
  13. mysql dump 拒绝访问_mysqldump访问被拒绝
  14. 树莓派屏幕显示No Signal
  15. Socket编程(Android客户端+PC服务器端)
  16. 配置Cisco VWIC T1/E1
  17. 【教程】如果公司的网络屏蔽了游戏【英雄联盟】的链接请求,使用这种方法玩游戏。...
  18. 了解如何使用 Mac 或 PC 同步音乐、影片(新系统不用iTunes)
  19. clickhouse lag/lead
  20. 什么是长尾理论以及长尾理论的启示

热门文章

  1. 高烧不退下隐藏套路,蔚来、小鹏、游侠们出路在何方?
  2. [爬虫面试] 总结一些爬虫工程师遇到的面试题(真实)
  3. 【敏感词汇过滤算法】基于DFA-前缀树的敏感词汇过滤算法(项目实用)
  4. 桂林理工大学 计算机网络 实验报告2交换机基本配置和交换机的VLAN配置
  5. VS Code:自定义快捷键(解决快捷键冲突问题)
  6. cad中简单流程图制作,cad流程图制作教程
  7. python模拟CryptoJS.AES.decrypt解密
  8. vue去除富文本编辑器引起的<p>等标签
  9. 有效记忆nginx正反代理定义
  10. HTML 5被媒体炒作