Numpy数组15min值 - 每小时平均值

时间:2016-08-03 12:57:17

标签: python numpy

我有以下情况:

一个numpy数组

x = np.array([12,3,34,5...,])

其中每个条目对应一个模拟结果(时间步长15分钟)。

现在我需要存储在新numpy数组中的平均每小时值(前4个元素的平均值,然后是下4个等)。是否有一种非常简单的方法来实现这一目标?

3 个答案:

答案 0 :(得分:2)

要处理大小不是4的倍数的数组, 将x复制到新数组tmp,其大小为4的倍数:

tmp = np.full((((x.size-1) // 4)+1)*4, dtype=float, fill_value=np.nan)
tmp[:x.size] = x

空值由nan表示。然后,您可以重新整形并使用nanmean来计算每行的平均值。 np.nanmeannp.mean类似,只是忽略nan s:

x = np.array([12,3,34,5,1])
tmp = np.full((((x.size-1) // 4)+1)*4, dtype=float, fill_value=np.nan)
tmp[:x.size] = x
tmp = tmp.reshape(-1, 4)
print(np.nanmean(tmp, axis=1))

打印

[ 13.5   1. ]

如果您安装了enter image description here,那么您可以按时间间隔构建时间序列和分组:

import numpy as np
import pandas as pd
x = np.array([12,3,34,5,1])
s = pd.Series(x, index=pd.date_range('2000-1-1', periods=x.size, freq='15T'))
result = s.groupby(pd.TimeGrouper('1H')).mean()
print(result)

产量

2000-01-01 00:00:00    13.5
2000-01-01 01:00:00     1.0
Freq: H, dtype: float64

答案 1 :(得分:1)

N = 4
mod_ = x.size % N
x1 = np.pad(x.astype(float), (0, (mod_ > 0) * (N - mod_)), 'constant', constant_values=(np.nan,))
x2 = np.reshape(x1, (int(x1.size/4), 4))
x3 = np.nanmean(x2, axis=1)
print(x3)

答案 2 :(得分:1)

这是另一种解决方案:

您的意见:

In [11]: x = np.array([12, 3, 34, 5, 1, 2, 3])

取b中的每4个元素

In [12]: b = [x[n:n+4] for n in range(0, len(x), 4)]

创建新的空列表以附加结果

In [13]: l = []

In [14]: for i in b:
   ....:     l.append(np.mean(i))
   ....:     

In [15]: l
Out[15]: [13.5, 2.0]