【问题标题】:Integrating a data array unevenly sampled to get the area between the 'curve' and 0整合不均匀采样的数据数组以获得“曲线”和 0 之间的区域
【发布时间】:2021-05-18 11:20:26
【问题描述】:

我有大约 100 个严格正元素的一维数据数组。有些人会多一些,有些人会少一些。大多数元素都很小,但此信号可能会有尖峰,通常在 4 到 5 的范围内。

例子:

 data = [0.44217042317282634, 0.5371139455855275,
         0.44094305007577467, 0.5703620638886562, 
         0.5442900940823339, 0.650659771810529,
         ...,
         0.7121380290819317, 0.6901401693275381]

如果我绘制信号,我会得到类似:

在上图中,有 111 个不均匀分布的点。采样率根本不是恒定的。 如何计算上方蓝色阴影的面积?

一个非常重要的方面是,如果我有一个具有更多样本的类似信号,产生相同的图,我希望该区域保持不变(很明显,但仍然如此)。

我完全不熟悉采样率不均匀的信号的集成技术。一些指导将不胜感激。谢谢!

【问题讨论】:

  • 你有采样时间作为一个数组吗?

标签: python scipy integration area


【解决方案1】:

假设您知道采样时间,您可以使用 scipy:

import numpy as np
from scipy import interpolate

data = np.array([0.44217042317282634, 0.5371139455855275,
         0.44094305007577467, 0.5703620638886562,
         0.5442900940823339, 0.650659771810529])

discrete_time = np.array([0.11,0.34,0.55,0.61,0.8,0.967])
area = interpolate.InterpolatedUnivariateSpline(discrete_time, data, k=1).integral(0,1)
print(area)

【讨论】:

  • 正如你从我的绘图 X 轴猜到的那样,我确实有采样时间。此操作的计算成本有多高? (我显然会计时,但如果可能的话,我想知道 O(n) 复杂度)
  • 不知道,说实话。 @Mathieu
  • 好的,我来测试一下。我理解这个想法,但我有点担心时间复杂度,因为这种集成首先需要插值。
  • 如果你将 k 保持在 1,那应该不会太糟糕。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 2014-08-22
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
相关资源
最近更新 更多