使用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. 我需要运行自己的节点吗?
  2. PHP/TP5 接口设计中异常处理
  3. python正则表达regex_Python 正则表达式(RegEx)
  4. 企业数字化转型解决方案
  5. 定时器实现方式之TimerTask、Timer
  6. /etc/fstab详解
  7. 机器学习难?那是你没看过这张路线图!
  8. windows安装gnu_在Windows上安装GNU Emacs
  9. 结合CRT与欧拉定理高阶幂求余
  10. vue 动态添加组件
  11. qcc512x_qcc302x笔记之环境搭建(一)
  12. 全系统进程隐藏win7winn10win11器风铃进程隐藏器软件
  13. 密码学的基础:X.690和对应的BER CER DER编码
  14. 极小化极大;292Nim 游戏;bitset容器;464我能赢吗;486预测赢家
  15. DDSM数据处理之PngWithOverlay 框出病灶区域
  16. springside4配置环境时无法下载到两个核心包
  17. 【区块链】7 个步骤入门区块链
  18. 杭州海赢科技分享速卖通绑定欧盟责任人流程及相关FAQ
  19. 个人永久性免费-Excel催化剂功能第84波-批量提取OUTLOOK邮件附件
  20. 一些常用的网址,分享给需要的朋友

热门文章

  1. 记录Android修改报名顺便迁移androidx
  2. 倍福触摸屏维修C7037-1037-0010按键操作面板
  3. 关爱教育奉献社会,努力实践热血青春
  4. vue项目实现定时刷新和关闭刷新功能
  5. 3D动漫建模全过程,不是一般人能学的会的,会的多不是人?
  6. java游戏孙悟空上网吧_王者荣耀:李白和孙悟空在网吧玩游戏,结果……
  7. 奶爸日记 - 带娃并不那么痛苦
  8. ElasticSearch-head,数据浏览不能显示数据解决方案
  9. 启动容器时报错:iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 1217 -j DNAT --to-de
  10. 出现字迹模糊迹象_3个迹象表明您将过度使用云功能