2016-04-04 20 views
1

関数がベクトル化されて出力が配列の平均値をとるようにする方法はありますか?各平均値は入力配列の0からの値の平均を表しますか?これをループすることはかなり簡単ですが、私はできるだけ効率的にしようとしています。例えば0 = 0、1 =平均値(0-1)、N =平均値(0-N)配列のスライス全体でnumpy平均をベクトル化する

+0

配列の "0-インデックス"とは何ですか? – HeinzKurt

+0

配列の先頭 – Seth

+0

ここに掲載されたソリューションのいずれかがあなたに役立つかどうか不思議ですか? – Divakar

答えて

3

cumulative averagingとすることができます。したがって、明白な解決策は、cumulative summationを含み、これらの合計を、そのような合計に関与する要素の数で除算することです。このように、ベクトル化実装がnp.cumsumを伴うだろうし、そのようにように、ndarrayためnp.arangeを得て、一般化することができ、参加要素の数で割る - あなたはpandasを使用することができるしている場合は

def cummean(A,axis): 
    """ Cumulative averaging 

    Parameters 
    ----------  
    A : input ndarray 
    axis : axis along which operation is to be performed 

    Output 
    ------  
    Output : Cumulative averages along the specified axis of input ndarray 
    """ 

    return np.true_divide(A.cumsum(axis),np.arange(1,A.shape[axis]+1)) 
2

expanding_meanありこれはnumpyの配列を直接操作します:

In [10]: pandas.expanding_mean(np.arange(1, 11)) 
Out[10]: array([ 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5]) 

この方法はまた、列ごとに動作します:

In [11]: A = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 
         [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]).T 

In [12]: A 
Out[12]: 
array([[ 1, 1], 
     [ 2, 1], 
     [ 3, 1], 
     [ 4, 1], 
     [ 5, 1], 
     [ 6, 1], 
     [ 7, 1], 
     [ 8, 1], 
     [ 9, 1], 
     [10, 1]]) 

In [13]: pandas.expanding_mean(A) 
Out[13]: 
array([[ 1. , 1. ], 
     [ 1.5, 1. ], 
     [ 2. , 1. ], 
     [ 2.5, 1. ], 
     [ 3. , 1. ], 
     [ 3.5, 1. ], 
     [ 4. , 1. ], 
     [ 4.5, 1. ], 
     [ 5. , 1. ], 
     [ 5.5, 1. ]]) 
関連する問題