在嵌套列表中垂直平均

时间:2018-11-09 02:08:28

标签: python list nested

我正在编写一个成绩簿程序,该程序设置一个嵌套的列表,其中的作业以列为单位,每个学生沿着行。该计划必须计算每个作业的平均值和每个学生的平均值。我已经按学生获得了平均值,但是现在我不知道如何通过作业来计算平均值。任何帮助,将不胜感激!       #gradebook.py

final File logFile = new File(module.getDir() + "logs/log-latest.log");

1 个答案:

答案 0 :(得分:1)

让我们使用矩阵而不是使用循环。它们使计算快得多,尤其是在处理大型数据集时。

例如

Per student:

[1, 2, 3, 4]       [1]
[4, 5, 6, 6]   x   [1]
[1, 1, 3, 1]       [1]

Per assignment

[1, 2, 3, 4]T      [1]
[4, 5, 6, 6]   x   [1]
[1, 1, 3, 1]       [1]

第一个操作返回每个学生和,第二个返回每个测试和。适当除以得到平均值。

Using numpy

import numpy as np

gradebook = [[61, 74, 69, 62, 72, 66, 73, 65, 60, 63, 69, 63, 62, 61, 64],
         [73, 80, 78, 76, 76, 79, 75, 73, 76, 74, 77, 79, 76, 78, 72],
         [90, 92, 93, 92, 88, 93, 90, 95, 100, 99, 100, 91, 95, 99, 96],
         [96, 89, 94, 88, 100, 96, 93, 92, 94, 98, 90, 90, 92, 91, 94],
         [76, 76, 82, 78, 82, 76, 84, 82, 80, 82, 76, 86, 82, 84, 78],
         [93, 92, 89, 84, 91, 86, 84, 90, 95, 86, 88, 95, 88, 84, 89],
         [63, 66, 55, 67, 66, 68, 66, 56, 55, 62, 59, 67, 60, 70, 67],
         [86, 92, 93, 88, 90, 90, 91, 94, 90, 86, 93, 89, 94, 94, 92],
         [89, 80, 81, 89, 86, 86, 85, 80, 79, 90, 83, 85, 90, 79, 80],
         [99, 73, 86, 77, 87, 99, 71, 96, 81, 83, 71, 75, 91, 74, 72]]


def get_student_average(gradebook):
    number_of_students = len(gradebook[0])
    number_of_assignments = len(gradebook)

    matrix = [1] * number_of_students 
    # [1, 1, 1, 1, ...]. This is 1 * 15. Need to transpose to make it 15*1

    # Converting both to numpy matrices
    matrix = np.array(matrix)
    gradebook = np.array(gradebook)

    # Transposing matrix and multiplying them
    print(gradebook.dot(matrix.T))

def get_assignment_average(gradebook):
    number_of_students = len(gradebook[0])
    number_of_assignments = len(gradebook)

    matrix = [1] * number_of_assignments 
    # [1, 1, 1, ...] . This is 1 * 10. Need to transpose to make it 10*1

    matrix = np.array(matrix)
    gradebook = np.array(gradebook)

    gradebook = gradebook.T
    matrix = matrix.T


    print(gradebook.dot(matrix))

get_student_average(gradebook)
get_assignment_average(gradebook)

结果

student_avg -> [ 984 1142 1413 1397 1204 1334  947 1362 1262 1235]
test_avg -> [826 814 820 801 838 839 812 823 810 823 806 820 830 814 804]