Iは、以下の状況がありますnumpyのアレイ15分値 - 毎時平均値
numpyのアレイの各エントリは、シミュレーション結果(時間ステップ15分)に対応
x = np.array([12,3,34,5...,])
を。
今や、新しいnumpy配列に格納されている平均時値(最初の4要素の平均値、次に4要素の平均値など)が必要です。これを達成するための非常に簡単な方法はありますか?
Iは、以下の状況がありますnumpyのアレイ15分値 - 毎時平均値
numpyのアレイの各エントリは、シミュレーション結果(時間ステップ15分)に対応
x = np.array([12,3,34,5...,])
を。
今や、新しいnumpy配列に格納されている平均時値(最初の4要素の平均値、次に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)
len(x)%4!= 0の場合はどうなりますか? –
私の編集した回答を見る –
@OphirCarmiありがとうございました!このアプローチを試してみると、 "ValueError:(0、-190)は負の値を含むことができません"というエラーメッセージが表示されます - 配列には194の値が含まれています。最初のものはnegativ、残りのものはpositivです – Matias
サイズが4の倍数である新しい配列、tmp
、にサイズ4の倍数ではないかもしれない配列、 コピーx
を処理するために:空の値はで表され
tmp = np.full((((x.size-1) // 4)+1)*4, dtype=float, fill_value=np.nan)
tmp[:x.size] = x
nan
。次に、形を変えてnanmean
を使って各行の平均を計算することができます。あなたはpandasがインストールされている場合は、あなたが時間間隔によって時系列やグループを構築することができ
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. ]
:np.nanmean
は、それがnan
Sを無視することを除いてnp.mean
のようなものです:
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
In [12]: b = [x[n:n+4] for n in range(0, len(x), 4)]
内のすべての4つの要素を取って結果を追加する新しい空のリストを作成します
In [13]: l = []
In [14]: for i in b:
....: l.append(np.mean(i))
....:
In [15]: l
Out[15]: [13.5, 2.0]
私はその質問を理解していません。いくつか例を挙げることができますか?ありがとう! –