Python Numpy阵列15分钟值-每小时平均值

Python Numpy阵列15分钟值-每小时平均值,python,numpy,Python,Numpy,我有以下情况: numpy数组 x = np.array([12,3,34,5...,]) 其中,每个条目对应一个模拟结果时间步长15分钟 现在我需要前4个元素的平均小时值,然后是下4个元素的平均值,以此类推,存储在一个新的numpy数组中。有没有一种非常简单的方法来实现这一点?要处理大小可能不是4的倍数的数组, N = 4 mod_ = x.size % N x1 = np.pad(x.astype(float), (0, (mod_ > 0) * (N - mod_)), 'cons

我有以下情况:

numpy数组

x = np.array([12,3,34,5...,])
其中,每个条目对应一个模拟结果时间步长15分钟


现在我需要前4个元素的平均小时值,然后是下4个元素的平均值,以此类推,存储在一个新的numpy数组中。有没有一种非常简单的方法来实现这一点?

要处理大小可能不是4的倍数的数组,
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)
将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.nanmean与np.mean类似,只是它忽略了nans:

印刷品

[ 13.5   1. ]
如果已安装,则可以按时间间隔构建timeseries和组:

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

下面是另一个解决方案:

你的意见:

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]

我不确定我是否理解这个问题。你能举几个例子吗?谢谢如果lenx%4!=0?@OphirCarmi非常感谢您!当我尝试这种方法时,我得到了错误消息ValueError:0,-190不能包含负值->数组包含194个值,第一个是negative,其余的正值我在N-mod_周围添加了括号。您得到的错误在x1=。。。线这与x的值无关。
In [13]: l = []

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

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