私は numpy に取り組んでおり、次のような同じサイズと形状の配列がいくつかあります
a= [153 186 0 258]
b=[156 136 156 0]
c=[193 150 950 757]
。したがって、この例の結果の配列は次のようになります:d=[167.333 157.333 553 507.5]
これは、この計算の結果です: d=[(153+156+193)/3 (186+136+150)/3 (156+950)/2 (258+757)/2]
. それは可能ですか?
質問する
4273 次
1 に答える
13
Python の場合:
>>> a = [153, 186, 0, 258]
>>> b = [156, 136, 156, 0]
>>> c = [193, 150, 950, 757]
>>> import statistics
>>> [statistics.mean([x for x in s if x]) for s in zip(*[a, b, c])]
[167.33333333333334, 157.33333333333334, 553, 507.5]
でこぼこで:
>>> import numpy as np
>>> A = np.vstack([a,b,c])
>>> np.average(A, axis=0, weights=A.astype(bool))
array([ 167.33333333, 157.33333333, 553. , 507.5 ])
列のすべての値が 0 になる可能性がある場合は、マスクされた配列を使用して、正規化が不可能 (重みの合計が 0 にならない) という問題を回避することができます。出力内の未定義のスロットはマスクされます。
>>> a[0] = b[0] = c[0] = 0
>>> A = np.vstack([a,b,c])
>>> np.ma.average(A, axis=0, weights=A.astype(bool))
masked_array(data=[--, 157.33333333333334, 553.0, 507.5],
mask=[ True, False, False, False],
fill_value=1e+20)
>>> np.ma.average(A, axis=0, weights=A.astype(bool)).tolist()
[None, 157.33333333333334, 553.0, 507.5]
于 2012-11-08T03:31:37.303 に答える