2016-11-28 77 views
2

我有一個向量X,它是由N = 10e6值組成。我想計算增加對的平均值。例如:pythonic方法來評估一個巨大的數據集的平均值

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

這樣做的效率非常低下。什麼是更智能的Python算法?註釋ExX都是浮點值的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

您可能希望使用'float'數組來區分:'np.arange(..)。astype(float)'如果'X'是int。 – Divakar

+0

@Divakar因爲Python 2'/'floor division? –

+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

相關問題