python - 优化用于事件识别的低通滤波器平滑代码

标签 python numpy pandas scipy accelerometer

<分区>

我正在尝试对加速度计数据(使用 x-acceleration(ax)、y-acceleration(ay)、z-acceleration(az))实现低通滤波器

我已经计算出我的 alpha 为 0.2

沿x方向的直流分量使用公式计算

new_ax[n] = (1-alpha)*new_ax[n-1] + (alpha * ax[n])

我能够针对具有几千条记录的小型数据集进行计算。但是我有一个包含一百万条记录的数据集,并且使用以下代码运行需要很长时间。如果能帮助我改进时间复杂度的代码,我将不胜感激。

### df is a pandas dataframe object
n_ax = []
seq = range(0, 1000000, 128)
for w in range(len(seq)):
   prev_x = 0
   if w+1 <= len(seq):
      subdf = df[seq[w]:seq[w+1]]
      for i in range(len(subdf)):
          n_ax.append((1-alpha)*prev_x + (alpha*subdf.ax[i]))
          prev_x = n_ax[i]

最佳答案

首先看起来你不需要

if w+1 <= len(seq):

w 变量不会超过 len(seq)。

因此,为了减少处理时间,只需使用 numpy 模块:

import numpy;

在这里您会发现比内置列表快得多的数组和方法。例如,与其循环遍历 numpy 数组中的每个元素来进行一些处理,不如直接在数组上应用 numpy 函数,并在几秒钟而不是几小时内获得结果。举个例子:

data = numpy.arange(0, 1000000, 128);
shiftData = numpy.arange(128, 1000000, 128);
result = (1-alpha)*data[:-1] + shiftdata;

查看一些关于 numpy 的教程。我使用此模块处理图像数据,相比之下,循环遍历列表需要 2 周时间来处理 5000 多张图像,而使用 numpy 类型最多需要 2 分钟。

关于python - 优化用于事件识别的低通滤波器平滑代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33519312/

相关文章:

python - 你如何将 csrf 验证添加到 Pyramid ?

Python 特征向量 : differences among numpy. linalg、scipy.linalg 和 scipy.sparse.linalg

python - 保留以某些文本字符串开头的行

python - 计算pandas数据框中聚类数据的累加和

python - 如何改进这种归并排序?

python - 对 Pandas 数据框进行子集化的最佳方法

python - 使用循环创建带有 Dataframe Pandas 的 Excel 工作表

python - 如何使用 pyusb 与该设备通信?

python - 时间增量到 Pandas 数据框中的字符串类型

python - 我需要有关 python 脚本的帮助,我正在尝试适应特定需求