我目前使用的移动平均线列表有效,但我想看看去皮是实现此目的的更快方法。
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:检查新文件是否在文件夹中[重复] - pythonThis question already has answers here: How do I watch a file for changes? (23个答案) 3年前关闭。 我是python的新手,但是我尝试创建一个自动化过程,其中我的代码将侦听目录中的新文件条目。例如,某人可以手动将zip文件复制到一个特定的文件夹中,并且我希望我的代码能够在文件完全…