基于时间的最快移动平均值 - python

我目前使用的移动平均线列表有效,但我想看看去皮是实现此目的的更快方法。

 strut[i].cpsi = round(bit2UntrimPSI(i) + float(strut[i].trim), 0)
 strut[i].rpsi.append([time.time(), strut[i].cpsi])
 while strut[i].rpsi[0][0] <= time.time() - apsiTimeWindow:
      del strut[i].rpsi[0]
 strut[i].apsi = mean([n[1] for n in strut[i].rpsi])

我试图使用Numpy的cumsum函数来完成此操作,但是我唯一的问题是数组的大小是恒定的,据我所知无法用时间来控制。下面是那个例子。

def running_mean(x, N):
    cumsum = numpy.cumsum(numpy.insert(x, 0, 0)) 
    return (cumsum[N:] - cumsum[:-N]) / float(N)

python大神给出的解决方案

对于这样的问题,您需要一个可以在两侧有效地扩展或截断的数据结构。 Python list在结尾处很有效率,但在开始时却没有效率。 deque是更好的选择。我不了解您的大问题是否足以按照精确的代码来构建演示,但这是一个演示,它演示了在需要获取更多值并抛出的情况下使用deque的想法。删除太旧的值,然后计算剩余值的平均值。

from collections import deque
from random import randint

# A double-ended queue and the current "time".
pairs = deque()
t = 0

# Check a few rounds.
for _ in range(3):

    # Get some more simulated (TIME, VALUE) pairs.
    n_vals = randint(5, 10)
    for _ in range(n_vals):
        val = randint(1, 10)
        pairs.append((t, val))
        time_incr = randint(1, 20)
        t += time_incr

    # Check.
    print('\nBEFORE :', pairs)

    # Exclude the data older than 30.
    last_time = pairs[-1][0]
    oldest_time = last_time - 30
    while pairs[0][0] < oldest_time:
        pairs.popleft()

    # Get mean of remaining vals.
    vals = [v for _, v in pairs]
    m = sum(vals) / len(vals)

    # Check.
    print('AFTER  :', pairs)
    print('VALS   :', vals)
    print('MEAN   :', m)

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

如何打印浮点数的全精度[Python] - python

我编写了以下函数,其中传递了x,y的值:def check(x, y): print(type(x)) print(type(y)) print(x) print(y) if x == y: print "Yes" 现在当我打电话check(1.00000000000000001, 1.0000000000000002)它正在打印:<…

Python:检查新文件是否在文件夹中[重复] - python

This question already has answers here: How do I watch a file for changes? (23个答案) 3年前关闭。 我是python的新手,但是我尝试创建一个自动化过程,其中我的代码将侦听目录中的新文件条目。例如,某人可以手动将zip文件复制到一个特定的文件夹中,并且我希望我的代码能够在文件完全…