文字列を構築して評価するのはあまりエレガントではありません。reduce
と組み合わせて使用すると、リストと辞書の内包表記np.add
によってすべて有効になります。まず、辞書のリストをリストの辞書に変換します。[]
{}
R
S
S = {k:[ R[j][k] for j in range(len(R)) ] for k in R[0].keys()}
np.add
現在、各キーには、個々のリストの長さで追加してから分割できる「裸の」numpy配列のリストのみがあります。
S = {'a1': [array([[ 32, 120, 80, 380, 360, 212, 188, 56, 312, 112],
[388, 348, 196, 236, 60, 200, 224, 208, 24, 104],
[324, 296, 24, 52, 220, 12, 104, 52, 232, 196]]),
array([[ 32, 120, 80, 380, 360, 212, 188, 56, 312, 112],
[388, 348, 196, 236, 60, 200, 224, 208, 24, 104],
[324, 296, 24, 152, 220, 12, 104, 52, 232, 196]])],
'a2': [array([[30, 82, 99, 72, 79, 98, 93, 93, 28, 46],
[ 8, 17, 50, 59, 85, 73, 48, 97, 87, 41],
[98, 36, 27, 55, 98, 39, 73, 51, 27, 33]]),
array([[30, 82, 99, 72, 79, 98, 93, 93, 28, 46],
[ 8, 17, 50, 59, 85, 73, 48, 97, 87, 41],
[98, 36, 27, 55, 98, 39, 73, 51, 27, 33]])],
'a3': [array([[78, 24, 87, 83, 30, 14, 88, 57, 55, 73],
[76, 94, 99, 58, 63, 34, 70, 81, 45, 20],
[32, 61, 0, 3, 33, 33, 38, 90, 11, 3]]),
array([[78, 24, 87, 83, 30, 14, 88, 57, 55, 73],
[76, 94, 99, 58, 63, 34, 70, 81, 45, 20],
[32, 61, 0, 3, 33, 33, 38, 90, 11, 3]])]}
平均を計算します。
T = {k:( reduce(np.add, v)/len(v) ) for k,v in S.iteritems()}
現在T
、平均値を持つnumpy配列の辞書です:
T = {'a1': array([[ 32, 120, 80, 380, 360, 212, 188, 56, 312, 112],
[388, 348, 196, 236, 60, 200, 224, 208, 24, 104],
[324, 296, 24, 152, 220, 12, 104, 52, 232, 196]]),
'a2': array([[30, 82, 99, 72, 79, 98, 93, 93, 28, 46],
[ 8, 17, 50, 59, 85, 73, 48, 97, 87, 41],
[98, 36, 27, 55, 98, 39, 73, 51, 27, 33]]),
'a3': array([[78, 24, 87, 83, 30, 14, 88, 57, 55, 73],
[76, 94, 99, 58, 63, 34, 70, 81, 45, 20],
[32, 61, 0, 3, 33, 33, 38, 90, 11, 3]])}