varianza sacar rango percentiles obtener moda intercuartilico geometrica estandar desviacion cuantiles como aritmetica python numpy

python - sacar - ¿Diferencia media Y varianza de una sola función?



varianza percentiles (2)

También puede evitar la sustracción haciendo uso de la relación entre la media, la varianza y la potencia de una señal:

In [7]: import numpy as np In [8]: a = np.random.rand(1000) In [9]: %%timeit ...: a.mean() ...: a.var() ...: 10000 loops, best of 3: 24.7 us per loop In [10]: %%timeit ...: m = a.mean() ...: np.mean((a-m)**2) ...: 100000 loops, best of 3: 18.5 us per loop In [11]: %%timeit ...: m = a.mean() ...: power = np.mean(a ** 2) ...: power - m ** 2 ...: 100000 loops, best of 3: 17.3 us per loop In [12]: %%timeit ...: m = a.mean() ...: power = np.dot(a, a) / a.size ...: power - m ** 2 ...: 100000 loops, best of 3: 9.16 us per loop

Usando Numpy / Python, ¿es posible devolver la varianza AND media de una llamada a una sola función?

Sé que puedo hacerlos por separado, pero se requiere la media para calcular la desviación estándar de la muestra. Entonces, si uso funciones separadas para obtener la media y la varianza, estoy agregando gastos generales innecesarios.

He intentado ver los documentos numpy aquí ( http://docs.scipy.org/doc/numpy/reference/routines.statistics.html ), pero sin éxito.


No puede pasar un medio conocido a np.std o np.var , tendrá que esperar al nuevo módulo de statistics biblioteca estándar , pero mientras tanto puede ahorrar un poco de tiempo usando la fórmula:

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

Si realmente está tratando de acelerar las cosas, intente np.dot para hacer la cuadratura y la suma (ya que eso es lo que es un producto de puntos):

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