22

Numpy/Python を使用して、単一の関数呼び出しから平均 AND 分散を返すことは可能ですか?

それらを個別に実行できることはわかっていますが、サンプル標準偏差を計算するには平均が必要です。したがって、別の関数を使用して平均と分散を取得すると、不要なオーバーヘッドが追加されます。

ここで numpy ドキュメント ( http://docs.scipy.org/doc/numpy/reference/routines.statistics.html )を見てみましたが、成功しませんでした。

4

3 に答える 3

28

np.stdまたはに既知の平均値を渡すことはできません。新しい標準ライブラリmodulenp.varを待つ必要がありますが、それまでは次の式を使用して時間を節約できます。statistics

In [329]: a = np.random.rand(1000)

In [330]: %%timeit
   .....: a.mean()
   .....: a.var()
   .....: 
10000 loops, best of 3: 80.6 µs per loop

In [331]: %%timeit
   .....: m = a.mean()
   .....: np.mean((a-m)**2)
   .....: 
10000 loops, best of 3: 60.9 µs per loop

In [332]: m = a.mean()

In [333]: a.var()
Out[333]: 0.078365856465916137

In [334]: np.mean((a-m)**2)
Out[334]: 0.078365856465916137

本当に速度を上げたい場合np.dotは、2 乗と合計を実行してみてください (それがドット積であるため)。

In [335]: np.dot(a-m,a-m)/a.size
Out[335]: 0.078365856465916137

In [336]: %%timeit
   .....: m = a.mean()
   .....: c = a-m
   .....: np.dot(c,c)/a.size
   .....: 
10000 loops, best of 3: 38.2 µs per loop
于 2013-10-15T21:17:21.153 に答える