11

定義された数値のリストの分散を出力する関数を作成しようとしています:

grades = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5]

これまでのところ、次の 3 つの関数の作成を進めてみました。

def grades_sum(my_list):
    total = 0
    for grade in my_list: 
        total += grade
    return total

def grades_average(my_list):
    sum_of_grades = grades_sum(my_list)
    average = sum_of_grades / len(my_list)
    return average

def grades_variance(my_list, average):
    variance = 0
    for i in my_list:
        variance += (average - my_list[i]) ** 2
    return variance / len(my_list)

ただし、コードを実行しようとすると、次の行に次のエラーが表示されます。

Line: variance += (average - my_list[i]) ** 2
Error: list index out of range

私の現在の Python の知識が限られている場合は申し訳ありませんが、私はまだ学習中です。この問題の解決を支援したい場合は、これを解決する方法について非常に複雑な方法を提案しないようにしてください。本当にありがとう.

4

8 に答える 8

23

numpyを試してください。

import numpy as np
variance = np.var(grades)
于 2014-11-16T13:09:59.813 に答える
5

Python 3.4 には、これを行う統計ライブラリがあります。

   import statistics
   grades = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5]
   statistics.pvariance(grades)
=> 334.07100591715977

https://docs.python.org/3/library/statistics.html#statistics.pvariance

于 2015-08-04T17:38:53.063 に答える
5

gnibblerはコードの問題を解決しましたが、組み込み関数ジェネレーター式を使用すると、これをはるかに簡単に実現できます。

average = sum(grades) / len(grades)
varience = sum((average - value) ** 2 for value in grades) / len(grades)

最初は少し怖く見えるかもしれませんが、リスト内包表記とジェネレータ式についてリンクしているビデオを見ると、実際には非常にシンプルで便利です。

于 2013-05-21T13:05:36.613 に答える
1

以下のコードは、カスタム関数を作成する分散を取得するために使用されます

   def variance(val):
       total_sum=sum(val)
       average=total_sum/len(val)
       a=[]
       for i in val:
           a.append((i-average)**2)
       return sum(a)/len(a)

   val=[2.18,2.22,2.24,1.62,1.32,1.85,1.85,2.70,3.60,4.60,1.38,2.34,2.71]
   variance(val)
于 2019-07-04T12:19:43.863 に答える
0

サンプル分散、つまり分散の偏りのない推定量が必要だと思います。この関数は、その仕事をするかもしれないと思います。ベクトル n の分散と平均を出力します。

n = [5, 3, 1, 2, 4]

def variance1337(n):
    var1 = []
    mean1 = sum(n)/len(n)
    for xs in n:
        var1.append((xs - mean1) ** 2)
    print(sum(var1)/(len(n) - 1))
    print(mean1)
于 2016-05-12T10:31:25.030 に答える
-1

以下のコードは、値の平均を取得するために使用されます

def grades_average(my_list):
    sum_of_grades = sum(my_list)
    average = sum(my_list) / len(my_list)
    return average

分散式 -> 平均からの二乗差の平均。以下のこのコードは、値の分散を取得するために使用されます

def grades_variance(my_list, average):
    variance = 0
    for i in my_list:
         variance += (average - i) ** 2
    return variance / len(my_list)
于 2015-10-03T20:14:47.023 に答える