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所示,您可以向量化您的功能.