当使用numpy的trapz函数时:在相同的x值处定义一个新的(不同的)y值,结果不是我最初的预期。
>>> import numpy as np
>>> np.trapz([1,1,1],[0,1,2]) #normal area defined by 3 y values, y=1 at x=0,x=1 and x=2
2.0
>>> np.trapz([1,1,1,1,1],[0,1,2,1,2]) #redefine point x=1 and x=2 with the same y value that was already used
2.0
>>> np.trapz([1,1,1,2,2],[0,1,2,1,2]) #redefine point x=1 and x=2 but with y=2
2.5
我希望完全覆盖该点(旧值被丢弃)或者将获得最高点(丢弃所有重叠区域)。可以看出,情况并非如此。
这种行为背后有数学原因吗?或者这只是函数编程方式的结果(如果不是这样使用的话)?
遗憾的是,我的数学或编程知识不能达到我自己基于source code来回答这个问题的程度。
更多例子:
>>> np.trapz([1,1,1,2,2],[0,1,2,2,1]) #redefine point x=2 first and THEN x=1 with y=2
0.0
>>> np.trapz([1,2,2,1,1],[0,1,2,1,2]) #start with y=2 and then add y=1 on x=1 and x=2
3.0
>>> np.trapz([1,1,1],[0,1,2]) #normal area again
2.0
>>> np.trapz([1,1,1],[2,1,0]) #but now defined in reverse order
-2.0
(上下文:我有一个系统的数据,其中时间并不总是正确设置,有时候时间戳开始从零开始计数,我想知道当我不修复这些数据会发生什么但是只需在trapz函数中输入它
答案 0 :(得分:2)
没有"重新定义"当你在trapz中重复一个x值时发生。 trapz方法执行以下操作:
x=[0,1,2,1,2]
会产生[1, 1, -1, 1]
。y=[1,2,2,1,1]
会产生[1.5, 2, 1.5, 1]
1*1.5 + 1*2 + (-1)*1.5 + 1*1 = 3
该算法不关注某些x值是否出现两次;没有y值取代其他值。
有时使用不同的y值连续两次输入相同的x值是有用的:即when your function has a discontinuity。
按顺序输入x值也可能很有用。每次回溯时,相应的y值对积分产生负面影响。例如,如果(x,y)对是下面绘制的多边形的顶点,以顺时针顺序给出,则trapz的输出是阴影区域。从右到左穿过的线段切掉了它们下面的区域,而不是添加。
另一个例子,如果x是位置,y是物体在该位置时施加的力,则积分是完成的总工作量;在这种情况下,如果对象左右移动,则x有序无序是有意义的。
但是如果您的数据点发生因为某些与数据含义无关的随机原因而出现故障,则trapz的输出无意义。