检查项目python,从数组中删除最小值

2024-09-30 01:32:10 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是到目前为止我的代码(computeFinalGrades) 在代码内部,我正在使用另一个代码(roundGrade-这很有效) 我得到错误代码AttributeError: 'numpy.ndarray' object has no attribute 'remove' 下面您还可以看到作业的说明

我已经尝试过在这里寻找任何解决方案,但我发现这些方案不能正常工作。 如果你们有更好的解决方案,欢迎分享

import numpy as np
from gradesRounded import roundGrade

def computeFinalGrades(grades):
    if -3 in 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

#print((computeFinalGrades(np.array([[7,4,10],[7,4,12]])))) - this is the testcode 

圆度代码:

def roundGrade(grades):
    gradesRounded = []
    for grades in grades:
        if (-5 <grades<- 1.5):
            grade = '-3'
        elif (-1.5 <=grades< 1.5):
            grade = '00'
        elif (1.5 <=grades< 3):
            grade = '02'
        elif (3 <=grades< 5.5):
            grade = '4'
        elif (5.5 <=grades< 8.5):
            grade = '7'
        elif (8.5 <=grades< 11):
            grade = '10'
        elif (11 <=grades< 15):
            grade = '12'
        gradesRounded.append(grade)
    return gradesRounded

和说明:

input = grades: An N × M matrix containing grades on the 7-step-scale given to N students on M different assignments. output= gradesFinal: A vector of length n containing the final grade for each of the N students.

For each student, the final grade must be computed in the following way:

  1. If there is only one assignment (M = 1) the final grade is equal to the grade of that assignment.
  2. If there are two or more assignments (M > 1) the lowest grade is discarded. The final grade is computed as the mean of M − 1 highest grades rounded to the nearest grade on the scale (using the function roundGrade).
  3. Irrespective of the above, if a student has received the grade −3 in one or more assignments, the final grade must always be −3.

Tags: ofthe代码inifisnpfinal
2条回答

正如错误中所说,numpy没有删除方法。您可以从numpy数组强制转换为list,然后使用remove方法。根据您提供的注释和代码:

import numpy as np
def roundGrade(grades):
    result = []
    for grade in grades:
        if (-5 < grade < -1.5):
            grade = '-3'
        elif (-1.5 <= grade < 1.5):
            grade = '00'
        elif (1.5 <= grade < 3):
            grade = '02'
        elif (3 <= grade < 5.5):
            grade = '4'
        elif (5.5 <= grade < 8.5):
            grade = '7'
        elif (8.5 <= grade < 11):
            grade = '10'
        elif (11 <= grade < 15):
            grade = '12'
        result.append(grade)
    return result

def computeFinalGrades(array_of_grades):
    list_of_grades = array_of_grades.tolist()
    result = []
    for grades in list_of_grades:
        if -3 in grades:
            gradesFinal= -3
        elif len(grades)>=2:
            grades.remove(min(grades))
            gradeFinal = np.mean(grades)
        elif len(grades)==1:
            gradeFinal = grades[0]
        result.append(gradeFinal)
    return roundGrade(result)

如果我们调用computeFinalGrades(np.array([[7,4,10],[7,4,12]])),它将返回:['10', '10']

那么np.removendarray.remove函数就不存在了。您应该使用np.delete并以以下内容结束:

def computeFinalGrades(grades): 
    if -3 in grades: 
        gradesFinal= -3 
    elif len(grades)>=2 : 
        np.delete(grades, np.argmin(grades)) 
        finalgrade = np.mean(grades) 
        gradesFinal = roundGrade(finalgrade) 
    elif len(grades)==1: 
         gradesFinal = grades[0] # as Keredu said below 
    
    return gradesFinal

其中np.argmin返回numpy数组中最小元素的索引

相关问题 更多 >

    热门问题