一段时间内的平均数据?

时间:2017-04-07 07:54:42

标签: python numpy average

我想以5秒的间隔计算样本数据中SIGNAL数据的平均VAL1,VAL2和SIGNAL值。换句话说,使用包含的样本数据,我想计算第一个数据点(在这种情况下是)01:45:18到01:45:22,01:45:23到01之间的平均值: 45:27,01:45:28到01:45:32,以及01:45:33通过剩下的数据。

理想情况下,我想将平均信息存储在变量中,例如:dec_average,ra_average和n_average

关于如何实现这一目标的任何建议或想法?这是我到目前为止的代码。

import sys
import os
import matplotlib.pyplot as plt
from matplotlib.dates import strpdate2num
import numpy as np
import matplotlib.colors
import matplotlib.cm

sat_id,dec,ra,n = np.loadtxt("mydata.asc", usecols=(3,5,7,9), unpack=True)

样本数据:
时间戳:01:45:18 SATID 02 VAL1 36 VAL2 188 SIGNAL 34
时间戳:01:45:19 SATID 02 VAL1 36 VAL2 188 SIGNAL 34
时间戳:01:45:20 SATID 02 VAL1 36 VAL2 188 SIGNAL 35
时间戳:01:45:21 SATID 02 VAL1 36 VAL2 188 SIGNAL 34
时间戳:01:45:22 SATID 02 VAL1 36 VAL2 188 SIGNAL 35
时间戳:01:45:23 SATID 02 VAL1 36 VAL2 188 SIGNAL 35
时间戳:01:45:24 SATID 02 VAL1 36 VAL2 188 SIGNAL 36
时间戳:01:45:25 SATID 02 VAL1 36 VAL2 188 SIGNAL 35
时间戳:01:45:26 SATID 02 VAL1 36 VAL2 188 SIGNAL 36
时间戳:01:45:27 SATID 02 VAL1 37 VAL2 188 SIGNAL 36
时间戳:01:45:28 SATID 02 VAL1 37 VAL2 188 SIGNAL 36
时间戳:01:45:29 SATID 02 VAL1 37 VAL2 188 SIGNAL 36
时间戳:01:45:30 SATID 02 VAL1 38 VAL2 188 SIGNAL 37
时间戳:01:45:31 SATID 02 VAL1 38 VAL2 188 SIGNAL 36
时间戳:01:45:32 SATID 02 VAL1 39 VAL2 188 SIGNAL 37
时间戳:01:45:33 SATID 02 VAL1 39 VAL2 188 SIGNAL 37
时间戳:01:45:34 SATID 02 VAL1 39 VAL2 188 SIGNAL 37
时间戳:01:45:35 SATID 02 VAL1 39 VAL2 188 SIGNAL 38

2 个答案:

答案 0 :(得分:0)

第一步是捕获每个条目中的重要数据,这些数据是您VAL1VAL2SIGNAL的值。

然后,对于每组五个条目,您需要获取每个字段的平均值,这可以通过添加字段的每个值然后除以5来完成。使用numpy这可以通过使用np.average()并传入您想要平均的数组来实现,在我们的例子中,这将是第一次的前五个元素,接下来的五个元素,以及如此,对于dec,可以按照以下方式完成。

我们将创建一个列表dec_average来存储每组条目的平均值。

dec_average = []

这将贯穿dec数组,只要剩下至少五个元素,就平均每组五个元素,并将该平均值追加到dec_average

for i in range(5, len(dec) + 1, 5):
    dec_average.append(np.average(dec[(i - 5):i]))

一旦我们完成了该循环的运行,如果数组中的元素数量不是5的倍数,那么仍然会有一些平均值。为了得到那些的平均值,我们需要获得最后x项,其中x是数组长度除以5的余数;因此,模数。

if (len(dec)) % 5 != 0:
    dec_average.append(np.average(dec[-(len(dec) % 5):]))

将这三段代码放在一起会产生一个计算列表中每五个项目的平均值的系统,如果最后剩下五个项目,那么只需获得剩余的平均值,然后追加每个平均值到一个数组。这可以扩展到适合您的其他数据条目。

答案 1 :(得分:0)

来自Alleo的回答here

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