2016-11-28 11 views
2

私はベクトルXを持っていて、N = 10e6の値で構成されています。私は増加するペアの平均を計算したいと思います。例:巨大なデータセットの平均を評価するPythonic法

for i in range(0,N-1): 
    Ex[i] = X[0:i+1].mean() 

これは非常に非効率的な方法です。 Pythonのインテリジェントなアルゴリズムは何でしょうか?注釈ExXは両方ともfloat値のnumpy配列です。

+0

あなたはあなた自身の 'mean'を記述する必要がありますitertools.accumulate' –

+1

'のようなものとペアリング可能性がありますあなたは 'numpy.cumsum'を使ってインデックスで分けることができます。 –

+2

@ YakymPirozhenko回答を投稿することを検討してください。 – Divakar

答えて

7

numpy -centricソリューションは、次のようになります。

X = np.random.rand(10**6) 
EX = np.cumsum(X)/np.arange(1, X.shape[0]+1) 
+1

'X'がintsの場合、' np.arange(..)。astype(float) 'のように' float'配列を使って除算することができます。 – Divakar

+0

Python 2 '/'フロア分割のため@Divakar? –

+1

@ juanpa.arrivillagaそう、それはpy2ものです。あるいは 'numpy.true_divide()'を使うこともできます。 – Divakar

3

エキスパートnumpyエキスパートですが、これは毎回要素の合計を計算することを避けています。ただ、合計を蓄積し、次のよう

current_sum = 0.0 
for i in range(0,N-1): 
    current_sum += X[i] 
    Ex[i] = current_sum/(i+1) 
+0

これはすでにかなり速く、そのような明らかな解決策です。ありがとう。 – gutelfuldead

関連する問題