如何将数字舍入到选定的整数

T.D*_*OGG 16 python numpy rounding

在丹麦,我们有一个奇怪的评级系统如下.[-3,00,02,4,7,10,12]我们的任务是采用具有不同十进制数的向量,并将其四舍五入到最接近的有效等级.到目前为止,这是我们的代码.

import numpy as np

def roundGrade(grades):    
    if (-5<grades<-1.5):
        gradesRounded = -3
    elif (-1.5<=grades<1.5):
        gradesRounded = 00
    elif (1.5<=grades<3):
        gradesRounded = 2
    elif (3<=grades<5.5):
        gradesRounded = 4
    elif (5.5<=grades<8.5):
        gradesRounded = 7
    elif (8.5<=grades<11):
        gradesRounded = 10
    elif (11<=grades<15):
        gradesRounded = 12
    return gradesRounded

print(roundGrade(np.array[-2.1,6.3,8.9,9]))
Run Code Online (Sandbox Code Playgroud)

我们的控制台似乎不喜欢这样并返回:TypeError:builtin_function_or_method'对象不可订阅

感谢所有帮助,如果您有更聪明的方法,欢迎您将我们放在我们的位置.

jua*_*aga 25

您收到该错误,因为在打印时,您使用的语法不正确:

print(roundGrade(np.array[-2.1,6.3,8.9,9]))
Run Code Online (Sandbox Code Playgroud)

需要是

print(roundGrade(np.array([-2.1,6.3,8.9,9])))
Run Code Online (Sandbox Code Playgroud)

请注意额外的括号: np.array(<whatever>)

但是,这不起作用,因为您的函数需要一个数字.幸运的是,numpy提供了一个可以为您修复的功能:

In [15]: roundGrade = np.vectorize(roundGrade)

In [16]: roundGrade(np.array([-2.1,6.3,8.9,9]))
Out[16]: array([-3,  7, 10, 10])
Run Code Online (Sandbox Code Playgroud)

http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.vectorize.html


mir*_*ulo 18

您可以简单地将每个年级的最小距离带到每个年级组,就像这样.这假设您实际上想要从您的成绩组中舍入到最接近的成绩,而您的当前代码并不完全正确.

grade_groups = [-3,0,2,4,7,10,12]
sample_grades = [-2.1,6.3,8.9,9]
grouped = [min(grade_groups,key=lambda x:abs(grade-x)) for grade in sample_grades]
print(grouped)
Run Code Online (Sandbox Code Playgroud)

产出:

[-3, 7, 10, 10]
Run Code Online (Sandbox Code Playgroud)

请注意,即使在修复错误之后,您的方法仍然无法正常工作,因为roundGrade需要一个数字作为参数.如juanapa所示,您可以向量化您的功能.