Quiero encontrar la media y la desviación estándar de 1, 2,… dígitos de varios (Z) listas. Por ejemplo, yo tengo

A_rank=[0.8,0.4,1.2,3.7,2.6,5.8]
B_rank=[0.1,2.8,3.7,2.6,5,3.4]
C_Rank=[1.2,3.4,0.5,0.1,2.5,6.1]
# etc (up to Z_rank )...

Ahora quiero hacer la media y la ets de *_Rank[0], la media y la ets de *_Rank[1], etc.

(es decir: la media y sexual de la 1er dígito de todos los (a..Z)_rank listas;

la media y la ets de la 2º dígito de todos los (a..Z)_rank listas;

la media y la ets de la 3er dígito…; etc).

  • Hola, viral. Desbordamiento de pila que funciona mejor como un preguntayrespuesta sitio. Haces una pregunta, y todos los demás, ofrece respuestas. Tu post contiene sólo instrucciones, no hay preguntas. ¿Tiene usted una programación específica pregunta? Para decirlo de otra manera, ¿qué has intentado hasta ahora, y donde estás atrapado?
  • ¿Por qué no estas listas en un diccionario o algo?
  • Lo siento Si no me transmitir pregunta correctamente. Quiero tomar media de A_rank[0] (0.8),B_rank[0](0.1),C_rank[0](1.2),…Z_rank[0]. mismo para A_rank[1](0.4),B_rank[1](2.8),C_rank[1](3.4),…Z_rank[1].

8 Comentarios

  1. 130

    Desde Python 3.4 /PEP450 hay un módulo de estadísticas en la biblioteca estándar, que tiene un método de desvest para el cálculo de la desviación estándar de iterables como el tuyo:

    >>> A_rank = [0.8, 0.4, 1.2, 3.7, 2.6, 5.8]
    >>> import statistics
    >>> statistics.stdev(A_rank)
    2.0634114147853952
    • Vale la pena señalar que pstddev probablemente debe ser utilizado en lugar de si la lista representa la totalidad de la población (es decir, la lista no es una muestra de una población). stddev se calcula utilizando la varianza de la muestra y se calculará la media de población.
    • Las funciones se llaman en realidad stdev y pstdev, el no uso de std para standard como sería de esperar. No pude editar el post como ediciones necesidad de modificar al menos 6 caracteres…
  2. 97

    Yo pondría A_Rank et al en un 2D NumPy de la matriz y, a continuación, utilizar numpy.media() y numpy.std() para calcular los medios y las desviaciones estándar:

    In [17]: import numpy
    
    In [18]: arr = numpy.array([A_rank, B_rank, C_rank])
    
    In [20]: numpy.mean(arr, axis=0)
    Out[20]: 
    array([ 0.7       ,  2.2       ,  1.8       ,  2.13333333,  3.36666667,
            5.1       ])
    
    In [21]: numpy.std(arr, axis=0)
    Out[21]: 
    array([ 0.45460606,  1.29614814,  1.37355985,  1.50628314,  1.15566239,
            1.2083046 ])
    • el resultado de numpy.ets no es correcta. Dados estos valores: 20,31,50,69,80 y poner en Excel utilizando DESVEST.S(A1:A5) el resultado es 25,109 NO 22,45.
    • Esto es correcto: numpy.enfermedades de transmisión sexual(arr, ddof=1)
    • No tiene nada que ver con la corrección. Si o no ddof=0 (por defecto, interpretar los datos de la población) o ddof=1 (interprete como muestras, es decir, estimar la verdadera varianza) depende de lo que estás haciendo.
    • Para aclarar más la @runDOSrun del punto, la función de Excel STDEV.P() y la Numpy función std(ddof=0) calcular el población sd, o no corregidos de muestra sd, mientras que la función de Excel STDEV.S() y Numpy función std(ddof=1) calcular el (corregida) de ejemplo sd, que es igual a la raíz cuadrada(N/(N-1)) veces la población sd, donde N es el número de puntos. Ver más: en.m.wikipedia.org/wiki/…
  3. 47

    He aquí algunas pura-el código de Python que usted puede utilizar para calcular la media y la desviación estándar.

    Todo el código que a continuación se basa en la estadísticas módulo en Python 3.4+.

    def mean(data):
        """Return the sample arithmetic mean of data."""
        n = len(data)
        if n < 1:
            raise ValueError('mean requires at least one data point')
        return sum(data)/n # in Python 2 use sum(data)/float(n)
    
    def _ss(data):
        """Return sum of square deviations of sequence data."""
        c = mean(data)
        ss = sum((x-c)**2 for x in data)
        return ss
    
    def stddev(data, ddof=0):
        """Calculates the population standard deviation
        by default; specify ddof=1 to compute the sample
        standard deviation."""
        n = len(data)
        if n < 2:
            raise ValueError('variance requires at least two data points')
        ss = _ss(data)
        pvar = ss/(n-ddof)
        return pvar**0.5

    Nota: para mejorar la precisión cuando se suma carrozas, la statistics módulo utiliza una función personalizada _sum en lugar de la incorporada en el sum que he usado en su lugar.

    Ahora tenemos por ejemplo:

    >>> mean([1, 2, 3])
    2.0
    >>> stddev([1, 2, 3]) # population standard deviation
    0.816496580927726
    >>> stddev([1, 2, 3], ddof=1) # sample standard deviation
    0.1
    • En caso de no ser pvar=ss/(n-1) ?
    • si se desea calcular la ejemplo la varianza (o la muestra de SD) puede utilizar n-1. El código de arriba es para la población SD (por lo que hay n grados de libertad).
    • Hola Alex, podrías por favor publicar la función para calcular la desviación estándar de la muestra? Estoy limitado con Python2.6, así que tengo a la retransmisión en esta función.
    • Hola, he editado el stddev función de modo que se puede calcular tanto la muestra de la población y desviaciones estándar.
  4. 21

    En Python 2.7.1, se puede calcular la desviación estándar utilizando numpy.std() para:

    • Población std: Sólo tiene que utilizar numpy.std() sin argumentos adicionales además de a tu lista de datos.
    • Muestra std: necesita pasar ddof (es decir, Delta Grados de Libertad) se establece a 1, como en el siguiente ejemplo:

    numpy.enfermedades de transmisión sexual(< su lista de >, ddof=1)

    El divisor utilizado en los cálculos es N – ddof, donde N representa el número de elementos. Por defecto ddof es cero.

    Calcula ejemplo sexual, en lugar de la población sexual.

  5. 5

    puro código python:

    from math import sqrt
    
    def stddev(lst):
        mean = float(sum(lst)) / len(lst)
        return sqrt(float(reduce(lambda x, y: x + y, map(lambda x: (x - mean) ** 2, lst))) / len(lst))
    • No hay nada ‘puro’ acerca de que 1-liner. Puaj. Aquí hay más python versión: sqrt(sum((x - mean)**2 for x in lst) / len(lst))
  6. 4

    Usando python, aquí están algunos de los métodos:

    import statistics as st
    
    n = int(input())
    data = list(map(int, input().split()))

    Approach1 – utilizando una función

    stdev = st.pstdev(data)

    De bookshare 2: calcular la varianza y tomar la raíz cuadrada de que

    variance = st.pvariance(data)
    devia = math.sqrt(variance)

    Approach3: el uso de las matemáticas básicas

    mean = sum(data)/n
    variance = sum([((x - mean) ** 2) for x in X]) / n
    stddev = variance ** 0.5
    
    print("{0:0.1f}".format(stddev))

    Nota:

    • variance calcula la varianza de la población de la muestra
    • pvariance calcula la varianza de toda la población
    • diferencias similares entre stdev y pstdev
  7. 3

    Las otras respuestas cubierta de cómo hacer std dev en python suficientemente, pero nadie se explica cómo hacer el extraño recorrido que he descrito.

    Voy a asumir la a a la Z es la totalidad de la población. Si no vemos Ome‘s respuesta sobre cómo inferencia a partir de una muestra.

    Por lo que para obtener la desviación estándar/media de los primeros dígitos de cada lista que se necesita algo como esto:

    #standard deviation
    numpy.std([A_rank[0], B_rank[0], C_rank[0], ..., Z_rank[0]])
    
    #mean
    numpy.mean([A_rank[0], B_rank[0], C_rank[0], ..., Z_rank[0]])

    Para acortar el código y generalizar esto para cualquier n-ésimo dígito usar la siguiente función que he generado para usted:

    def getAllNthRanks(n):
        return [A_rank[n], B_rank[n], C_rank[n], D_rank[n], E_rank[n], F_rank[n], G_rank[n], H_rank[n], I_rank[n], J_rank[n], K_rank[n], L_rank[n], M_rank[n], N_rank[n], O_rank[n], P_rank[n], Q_rank[n], R_rank[n], S_rank[n], T_rank[n], U_rank[n], V_rank[n], W_rank[n], X_rank[n], Y_rank[n], Z_rank[n]] 

    Ahora usted puede conseguir simplemente la stdd y la media de todo el enésimo lugares de la a a la Z como este:

    #standard deviation
    numpy.std(getAllNthRanks(n))
    
    #mean
    numpy.mean(getAllNthRanks(n))
    • Para cualquier interesado, me genera la función utilizando este sucio one-liner: str([chr(x)+'_rank[n]' for x in range(65,65+26)]).replace("'", "")

Dejar respuesta

Please enter your comment!
Please enter your name here