Standard deviation of a list

后端 未结 8 1703
旧时难觅i
旧时难觅i 2020-12-07 09:57

I want to find mean and standard deviation of 1st, 2nd,... digits of several (Z) lists. For example, I have

A_rank=[0.8,0.4,1.2,3.7,2.6,5.8]
B_rank=[0.1,2.8,         


        
相关标签:
8条回答
  • 2020-12-07 09:58

    Since Python 3.4 / PEP450 there is a statistics module in the standard library, which has a method stdev for calculating the standard deviation of iterables like yours:

    >>> A_rank = [0.8, 0.4, 1.2, 3.7, 2.6, 5.8]
    >>> import statistics
    >>> statistics.stdev(A_rank)
    2.0634114147853952
    
    0 讨论(0)
  • 2020-12-07 09:58

    The other answers cover how to do std dev in python sufficiently, but no one explains how to do the bizarre traversal you've described.

    I'm going to assume A-Z is the entire population. If not see Ome's answer on how to inference from a sample.

    So to get the standard deviation/mean of the first digit of every list you would need something like this:

    #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]])
    

    To shorten the code and generalize this to any nth digit use the following function I generated for you:

    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]] 
    

    Now you can simply get the stdd and mean of all the nth places from A-Z like this:

    #standard deviation
    numpy.std(getAllNthRanks(n))
    
    #mean
    numpy.mean(getAllNthRanks(n))
    
    0 讨论(0)
  • 2020-12-07 10:01

    In Python 2.7.1, you may calculate standard deviation using numpy.std() for:

    • Population std: Just use numpy.std() with no additional arguments besides to your data list.
    • Sample std: You need to pass ddof (i.e. Delta Degrees of Freedom) set to 1, as in the following example:

    numpy.std(< your-list >, ddof=1)

    The divisor used in calculations is N - ddof, where N represents the number of elements. By default ddof is zero.

    It calculates sample std rather than population std.

    0 讨论(0)
  • 2020-12-07 10:05

    In python 2.7 you can use NumPy's numpy.std() gives the population standard deviation.

    In Python 3.4 statistics.stdev() returns the sample standard deviation. The pstdv() function is the same as numpy.std().

    0 讨论(0)
  • 2020-12-07 10:09

    Using python, here are few methods:

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

    Approach1 - using a function

    stdev = st.pstdev(data)
    

    Approach2: calculate variance and take square root of it

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

    Approach3: using basic math

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

    Note:

    • variance calculates variance of sample population
    • pvariance calculates variance of entire population
    • similar differences between stdev and pstdev
    0 讨论(0)
  • 2020-12-07 10:11

    I would put A_Rank et al into a 2D NumPy array, and then use numpy.mean() and numpy.std() to compute the means and the standard deviations:

    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 ])
    
    0 讨论(0)
提交回复
热议问题