2017-02-18 6 views
0

私は長さの異なる複数の配列を持っています。このデータを平均化して同等の配列にしたいと思います。平均固定長が同じ固定長

np.array([(1+2*0.66)/1.66, (2*0.33+3*1+4*0.33)/1.66, (4*0.66+5)/1.66 ])

理由::5/3 = 1.66

array1 = np.array([1, 2, 3, 4, 5]) 
array2 = np.array([1, 2, 3, 4]) 
target_length = 3 
def cast(array, target_length): 
    ... 

これはcast(array1, target_length)としてを与えるべきです。また、我々が得るだろう: cast(array1, target_length)として:

np.array([(1+2*0.33)/1.33, (2*0.66+3*0.66)/1.33, (3*0.33+4)/1.33])

理由:4/3 = 1.33。

numpy解決策が利用可能であるため、アレイを拡張する必要はありません。

numpyライブラリを使用したソリューションはありますか?

+0

適用する一般的な式は何ですか。アレイが成長する必要があるとき、目標の長さが1の場合はどうなるでしょうか... – trincot

+1

あなたは何をしようとしているのかをはっきりさせておく必要があります。 – PrestonH

+0

答えを更新しました。アレイは成長しません。ポリシーは、配列の長さを 'target_length'で除算してしきい値を取得し、しきい値が得られるまで部分的に値を加算することです。 –

答えて

2

質問は、いくつかの異なる方法で読んで、私は右のそれを得た場合、何を達成しようとしているがそれはあなたが目指しているものなら、これは介して取得することができる

def cast(array, target_length): 
    target = np.zeros(target_length) 
    for i in range(target_length*len(array)): 
     target[i//len(array)] += array[i//target_length]/len(array) 
    return target 

であることができnumpy操作として

def cast(array, target_length): 
    return np.mean(np.repeat(array, target_length).reshape(-1, len(array)), 1) 
+0

質問は「numpyライブラリを使用したソリューションはありますか?あなたの答えは基本的に「いいえ」でしょうか? – MSeifert

+0

@MSeifert:戻り値の型として 'np.array'を取得したいので、どんな解決策を思いついても、numpyは避けるのが難しいでしょう。 (答えを更新して計算を変更せずに明示的にしました) – fuglede

+1

これは戻り値の型ではなく、問題のベクトル化に関するものです。あなたの解は、numpy配列ではPythonリストよりも遅くなります。それが、私の目の中では、それを非劣悪な解決策にしています。 – MSeifert