如何从矩阵的行中删除最小值-

狗狗

因此,我们的建议是创建一个函数,该函数将输入分数〜(一个N×M矩阵,其中包含给M个不同作业的N个学生的7步尺度的分数),并计算成绩Final(长度为n的向量,包含N名学生的最终成绩。)。

对于每个学生,必须按照以下方式计算最终成绩:

  1. 如果只有一个作业(M = 1),则最终成绩等于该作业的成绩。

  2. 如果有两个或多个作业(M> 1),则最低成绩将被丢弃。最终分数的计算方法是将M − 1个最高分数的平均值四舍五入到刻度上最接近的分数(使用roundGrade函数)。

  3. 不管以上哪种情况,如果学生在一项或多项作业中获得的分数为-3,则最终分数必须始终为-3。

我在下面插入了roundGrade函数,但是当我尝试运行矩阵时,我收到了。TypeError: unsupported operand type(s) for /: 'NoneType' and 'int'”。这意味着我可能完全误解了一些东西。

import numpy as np
def computeFinalGrades(grades):
    if len(grades)==1:
    gradesFinal = grades
elif len(grades)>=2:
    trimmed = grades.remove(min(grades))
    finalgrade = np.mean(trimmed)
    gradesFinal = roundGrade(finalgrade)
elif grades[grades==-3]:
    gradesFinal= -3
    return gradesFinal

def roundGrade(grades):
   grade_groups = [-3,0,2,4,7,10,12]
   gradesRounded = [min(grade_groups,key=lambda x:abs(grade-x)) for grade in     grades]
   return gradesRounded

我感谢您的帮助,也欢迎向我展示一种更智能的方法。

纱纺

大概有5个方面,其需要在原代码被改变:压痕,list.removeif/elif订单,价值的存在是为了在列表和通过列表的检查方式roundGrade()的功能。

1.缩进

首先,您的缩进不正确。python解释器将缩进考虑在内,这一点很重要。在每个if语句之后,您应针对该特定条件缩进代码块。除此之外,还应确保if和elif处于相同的缩进级别。因此它应该看起来像这样。

import numpy as np
def computeFinalGrades(grades):
    if len(grades)==1:
        gradesFinal = grades
    elif len(grades)>=2:
        trimmed = grades.remove(min(grades))
        finalgrade = np.mean(trimmed)
        gradesFinal = roundGrade(finalgrade)
    elif grades[grades==-3]:
        gradesFinal= -3
    return gradesFinal

def roundGrade(grades):
   grade_groups = [-3,0,2,4,7,10,12]
   gradesRounded = [min(grade_groups,key=lambda x:abs(grade-x)) for grade in     grades]
   return gradesRounded

2. list.remove返回无

其次,假设您要将列表传递给computeFinalGrades,那么grades.remove intrimmed = grades.remove(min(grades))会在适当位置修改成绩列表并返回None因此,当您在其上调用函数roundGrade时,会出现NoneType错误。

3. if / elif块的顺序

第三,if块的流程是错误的。考虑将数组[1,2,3,4,5,-3]传递到的情况computeFinalGrades([1,2,3,4,5,-3]),然后if语句if len(grades)==1将返回True,并且评估将在此处停止。相反,您应该移至grades[grades==-3]顶部,成为要评估的第一个语句,因为一旦此语句为true,则应始终返回-3。

4.检查列表中的值

第四,grades[grades==-3]首先评估变量grades是否指向-3,这又返回false,因为grades始终是列表,而不是整数-3。在这一点上,您grades[False]将得到同等的对待,grades[0]因此您总是会得到第一个结果。相反,pythonic方法是使用in运算符。IEelif -3 in grades:

5. roundGrade尝试对不可迭代对象进行两次迭代

第五,gradesFinal = roundGrade(finalgrade)不起作用,因为finalgrade = np.mean(trimmed)它是一个数字。但是,您会在此单个数字上调用roundGrade,然后for grade in grades在函数内的此单个数字上进行迭代roundGrade当您尝试执行相同的错误min(grade_groups,key=lambda x:abs(grade-x))这是因为您要在单个值上调用min。如果要最小化此配对,则更好的方法是。gradesRounded = [(grade,lambda x:abs(mean_grade-x)) for grade in grade_groups]因此,当您传递列表或变量时,您应该知道这一点。

我已经编辑roundGrade以获取单个值,然后遍历您的成绩组以创建一个值绝对差值的元组列表,然后是成绩组中的成绩。然后我按升序对其进行排序,并简单地在第一个元组中返回第二个值,这是您在成绩表中的成绩。请注意,尽管这样做的缺点是,如果mean_grade恰好位于grade_groups中的两个相邻值之间,则总是返回grade_groups中的较低成绩。

放在一起,做到这一点的一种方法是:

import numpy as np

def computeFinalGrades(grades):
    if -3 in grades:
        print grades
        gradesFinal= -3
    elif len(grades)>=2:
        grades.remove(min(grades))
        finalgrade = np.mean(grades)
        gradesFinal = roundGrade(finalgrade)
    elif len(grades)==1:
        gradesFinal = grades
    return gradesFinal

def roundGrade(mean_grade):

    grade_groups = [-3,0,2,4,7,10,12]
    gradesRounded = [(abs(grade-mean_grade),grade)for grade in grade_groups]
    gradesRounded.sort()
    return gradesRounded[0][1]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何删除数组中的重复对象并保持最小值

来自分类Dev

如何从mysql中的表的前3行获取最小值

来自分类Dev

分而治之算法:求矩阵的最小值

来自分类Dev

从矩阵迭代删除列和行,以最小化行和列最小值的平均值

来自分类Dev

分组并删除r数据帧中的最小值

来自分类Dev

如何使用LINQ以删除列表中的最小值和最大值

来自分类Dev

Matlab:矩阵的最小值

来自分类Dev

如何找到树中的最小值?

来自分类Dev

R:在删除最小值和最大值之后,计算选定列中每一行的SD

来自分类Dev

通过使用小矩阵在巨大凸矩阵中的全局最小值

来自分类Dev

如何找到数据帧或矩阵的最小值/最大值的位置(行/列)(R问题)

来自分类Dev

如何在Google Visualization Gauge中删除最小值和最大值

来自分类Dev

如何从python中的数组中删除所有最小值

来自分类Dev

如何在矩阵中按行为最小值分配0(快速/有效方式)?

来自分类Dev

向量化矩阵计算,比较关系矩阵并在Python中取最小值

来自分类Dev

如何在Pandas DataFrame中获得最小值不为零的第一行索引?

来自分类Dev

R获得矩阵中每一行的最小值,并返回行名和列名

来自分类Dev

如何按组选择最小值且包含R中的NA的行

来自分类Dev

获取矩阵中的前四个最小值

来自分类Dev

如何从集合中获取最小值

来自分类Dev

如何在VBA中找到具有最小值的行的最小值

来自分类Dev

Python 矩阵的最小值

来自分类Dev

如何从SQL中一行的多列中获取最小值

来自分类Dev

如何在 SQL 中获取一组行的最小值和最大值?

来自分类Dev

在 SQL 表中的行中查找最小值

来自分类Dev

从 2 个矩阵 R 中寻找每一行的最小值

来自分类Dev

如何获取值列表中具有最小值的行

来自分类Dev

使用 R 中的循环从矩阵中递归删除最小值

来自分类Dev

删除字典中的重复项并仅保留最小值

Related 相关文章

  1. 1

    如何删除数组中的重复对象并保持最小值

  2. 2

    如何从mysql中的表的前3行获取最小值

  3. 3

    分而治之算法:求矩阵的最小值

  4. 4

    从矩阵迭代删除列和行,以最小化行和列最小值的平均值

  5. 5

    分组并删除r数据帧中的最小值

  6. 6

    如何使用LINQ以删除列表中的最小值和最大值

  7. 7

    Matlab:矩阵的最小值

  8. 8

    如何找到树中的最小值?

  9. 9

    R:在删除最小值和最大值之后,计算选定列中每一行的SD

  10. 10

    通过使用小矩阵在巨大凸矩阵中的全局最小值

  11. 11

    如何找到数据帧或矩阵的最小值/最大值的位置(行/列)(R问题)

  12. 12

    如何在Google Visualization Gauge中删除最小值和最大值

  13. 13

    如何从python中的数组中删除所有最小值

  14. 14

    如何在矩阵中按行为最小值分配0(快速/有效方式)?

  15. 15

    向量化矩阵计算,比较关系矩阵并在Python中取最小值

  16. 16

    如何在Pandas DataFrame中获得最小值不为零的第一行索引?

  17. 17

    R获得矩阵中每一行的最小值,并返回行名和列名

  18. 18

    如何按组选择最小值且包含R中的NA的行

  19. 19

    获取矩阵中的前四个最小值

  20. 20

    如何从集合中获取最小值

  21. 21

    如何在VBA中找到具有最小值的行的最小值

  22. 22

    Python 矩阵的最小值

  23. 23

    如何从SQL中一行的多列中获取最小值

  24. 24

    如何在 SQL 中获取一组行的最小值和最大值?

  25. 25

    在 SQL 表中的行中查找最小值

  26. 26

    从 2 个矩阵 R 中寻找每一行的最小值

  27. 27

    如何获取值列表中具有最小值的行

  28. 28

    使用 R 中的循环从矩阵中递归删除最小值

  29. 29

    删除字典中的重复项并仅保留最小值

热门标签

归档