2016-10-29 9 views
2

次元が同じ場合、numpy平均関数は完全に正常に機能します。さまざまな行サイズのnumpy.mean

a = np.array([[1, 2], [3, 4]]) 
a.mean(axis=1) 
array([ 1.5, 3.5]) 

しかし、私はvarryingの行サイズでそれを行う場合には、エラー、私はこの問題に関するマニュアルの何かを見つけることができません

a = np.array([[1, 2], [3, 4, 5]]) 
a.mean(axis=1) 
IndexError: tuple index out of range 

を与えます。私は自分自身の平均を計算することができましたが、私はこれを可能にする必要があることを見て、このための関数を使ってビルドを使用したいと考えています。

+0

を、リスト。それを配列にすることはあまりできません。あなた、またはnumpyは、まだそれをリストのリストとして扱わなければなりません。 – hpaulj

答えて

1

ここでアプローチだ -

# Store length of each subarray 
lens = np.array(map(len,a)) 

# Generate IDs based on the lengths 
IDs = np.repeat(np.arange(len(lens)),lens) 

# Use IDs to do bin-based summing of a elems and divide by subarray lengths 
out = np.bincount(IDs,np.concatenate(a))/lens 

サンプル実行 -

In [34]: a # Input array 
Out[34]: array([[1, 2], [3, 4, 5]], dtype=object) 

In [35]: lens = np.array(map(len,a)) 
    ...: IDs = np.repeat(np.arange(len(lens)),lens) 
    ...: out = np.bincount(IDs,np.concatenate(a))/lens 
    ...: 

In [36]: out # Average output 
Out[36]: array([ 1.5, 4. ]) 

よりシンプルな代替方法リストの内包使用して - 第二ケースは、オブジェクトの1次元配列されていることを

In [38]: [np.mean(i) for i in a] 
Out[38]: [1.5, 4.0] 
+0

これは正確に何が必要なのですか?これは本当にこれに近づく最も簡単な方法ですか? – NicolaiF

+0

@ NicolaiFそのために、編集時に 'list comprehension'を追加することができます。 – Divakar

+0

包括的な答えをありがとう! – NicolaiF

関連する問題