簡體   English   中英

NumPy數組15分鍾值-每小時平均值

[英]Numpy array 15min values - hourly mean values

我有以下情況:

一個numpy數組

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

其中每個條目對應一個模擬結果(時間步長15分鍾)。

現在,我需要將平均小時值(前4個元素的均值,然后是下4個元素的均值)存儲在新的numpy數組中。 有沒有很簡單的方法來完成此任務?

要處理大小可能不是4的倍數的數組, tmp x復制到新的數組tmp ,其大小是4的倍數:

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

空值用nan表示。 然后,您可以重塑nanmean並使用nanmean計算每行的均值。 np.nanmean類似於np.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. ]

如果安裝了熊貓 ,則可以建立時間序列並按時間間隔進行分組:

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
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)

這是另一種解決方案:

您的輸入:

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM