のは、どのようにして平均値と結合されたすべての3つの配列の標準偏差を計算する必要があります?形状合わせて平均値と標準偏差
(682, 89, 138)
(2668, 76, 89)
(491, 62, 48)
と私はnumpyの配列を持っているとしましょうかそれらが同じ形であれば、np.stack()
を使用して、結果の配列の平均と標準偏差を得ることができます。
異なるサイズでこれを行うことはできますか?または、平均と標準を得る前に私は形を変えなければならないでしょうか?
のは、どのようにして平均値と結合されたすべての3つの配列の標準偏差を計算する必要があります?形状合わせて平均値と標準偏差
(682, 89, 138)
(2668, 76, 89)
(491, 62, 48)
と私はnumpyの配列を持っているとしましょうかそれらが同じ形であれば、np.stack()
を使用して、結果の配列の平均と標準偏差を得ることができます。
異なるサイズでこれを行うことはできますか?または、平均と標準を得る前に私は形を変えなければならないでしょうか?
式(standard deviation
およびmean
)を使用して、すべての入力配列の2つのスカラー値を連結/スタッキングなしで(大規模なNumPy配列では高価になる可能性があります)計算することができます。平均で標準偏差のステップでそれをやろうとします。std
の計算でmean
を使うことができるようです。
を組み合わせた平均値の取得:だから
を、我々は平均/平均で始まります。このために、配列ごとに総和スカラーを取得します。次に、総和を求め、最後にすべての配列の要素数で除算します。
合成標準偏差値の取得:標準偏差について
に、我々は、式:
そこで、我々は、前のステップから得られた合わせた平均値を使用しますstd
の式を使用して、2乗微分を求め、すべての配列の要素の合計数で除算し、平方根を適用します。
実装
さんはそうのような、入力配列がa
とb
あり、我々は一つの解を持つことになりましょう -
N = float(a.size + b.size)
mean_ = (a.sum() + b.sum())/N
std_ = np.sqrt((((a - mean_)**2).sum() + ((b - mean_)**2).sum())/N)
検証用のサンプル実行
In [266]: a = np.random.rand(3,4,2)
...: b = np.random.rand(2,5,3)
...:
In [267]: N = float(a.size + b.size)
...: mean_ = (a.sum() + b.sum())/N
...: std_ = np.sqrt((((a - mean_)**2).sum() + ((b - mean_)**2).sum())/N)
...:
In [268]: mean_
Out[268]: 0.47854757879348042
In [270]: std_
Out[270]: 0.27890341338373376
確認するには、スタックしてその後、関連するufuncs使用 - すべてのそれらの配列を保持するリストについては、入力
として配列の
一覧
In [271]: A = np.hstack((a.ravel(), b.ravel()))
In [273]: A.mean()
Out[273]: 0.47854757879348037
In [274]: A.std()
Out[274]: 0.27890341338373376
を、我々はそうのように、それらを反復処理する必要がある - A = [a,b,c] # input list of arrays
N = float(sum([i.size for i in A]))
mean_ = sum([i.sum() for i in A])/N
std_ = np.sqrt(sum([((i-mean_)**2).sum() for i in A])/N)
サンプルラン -
In [301]: a = np.random.rand(3,4,2)
...: b = np.random.rand(2,5,3)
...: c = np.random.rand(7,4)
...:
In [302]: A = [a,b,c] # input list of arrays
...: N = float(sum([i.size for i in A]))
...: mean_ = sum([i.sum() for i in A])/N
...: std_ = np.sqrt(sum([((i-mean_)**2).sum() for i in A])/N)
...: print mean_, std_
...:
0.47703535428 0.293308550786
In [303]: A = np.hstack((a.ravel(), b.ravel(), c.ravel()))
...: print A.mean(), A.std()
...:
0.47703535428 0.293308550786
flatten、append、compute –
これらの配列の計算をどのように定義しますか?形状は異なりますが、エレメントの総数も異なります。 – hpaulj
私は平均とstdの1つの値を取得したい。シェイプが一致すると、配列は他の配列の上に積み重ねられます。 – Char