Python NumPy-最高平均值指数

Python NumPy-最高平均值指数,python,numpy,Python,Numpy,我有以下价值观: grade_list = [[99 73 97 98] [98 71 70 99]] student_ids = [521 597 624 100] 成绩列表中的每个数组表示每个学生的成绩列表(学生521分为99、98分,学生597分为73、71分,依此类推) 我的目标是返回平均分数最高的学生ID(应该是521,因为平均值是98.5,这是最高的) 我试过这个: def find_student_with_max_avg(grade_list, student_ids):

我有以下价值观:

grade_list = [[99 73 97 98] [98 71 70 99]]
student_ids = [521 597 624 100]
成绩列表中的每个数组
表示每个学生的成绩列表(学生521分为99、98分,学生597分为73、71分,依此类推)

我的目标是返回平均分数最高的学生ID(应该是
521
,因为平均值是98.5,这是最高的)

我试过这个:

def find_student_with_max_avg(grade_list, student_ids):
    mean_grades = np.mean(grade_list, axis=1)
    best_student_index = student_ids[mean_grades.argmax()]
    return best_student_index
它返回了
521
,但是我试着玩
grade\u列表,我发现即使我将这个学生的成绩设置为0,它仍然返回
521`

不知道如何获得最佳学生的学号,知道吗?

试试这个

import numpy as np

grade_list = [[99,73,97,98] ,[98,71,70,99]]
student_ids = [521,597,624,100]

# axis 0 is row-wise, and 1 is column-wise
student_ids[np.array(grade_list).mean(axis=0).argmax()]

您沿着错误的轴取平均值:

>>> np.mean(grade_list, axis=1)
array([91.75, 84.5 ])
更改轴,并检查获得的平均值是否与学生ID相同

>>> np.mean(grade_list, axis=0)
array([98.5, 72. , 83.5, 98.5])

我会用这个柜台

from collections import Counter
import numpy as np


grade_list = [[99, 73, 97, 98], [98, 71, 70, 99]] 
student_ids = [521, 597, 624, 100]                                     

c = Counter() 
for i,n in enumerate(student_ids): 
    c.update({n:np.mean([item[i] for item in grade_list])}) 
                                                                   

c.most_common()                                                        
[(521, 98.5), (100, 98.5), (624, 83.5), (597, 72.0)]
如你所见,在这种情况下,你得到了两个最好的学生

In [17]: best_score = c.most_common(1)[0][1]                                    

In [18]: best_score                                                             
Out[18]: 98.5

In [19]: best_students = [k for k,v in c.items() if v == best_score]            

In [20]: best_students                                                          
Out[20]: [521, 100]