我需要解决此任务:
head (example)
radar_id date temp u v hgt W wind_ang temp_diff tw altitude_500
<chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Dagan 2014-03-02 18.8 -6.00 4.80 77 7.68 129. 5. -3.33 547
2 Dagan 2014-03-02 17.6 -2.40 9.30 742 9.60 166. 6 -9.20 547
3 Dagan 2014-03-02 16.2 3.10 15.4 1463 15.7 -169. 5.80 -10.4 547
4 Dagan 2014-03-03 16.2 0.900 -0.500 96 1.03 -60.9 -2.6 -0.971 547
5 Dagan 2014-03-03 13.0 3.10 -0.500 754 3.14 -80.8 -4.6 -2.39 547
6 Dagan 2014-03-03 10.8 8.10 4.10 1462 9.08 -117. -5.30 -5.01 547
def roundGrade(grades):
# Insert your code here
return gradesRounded
:一个向量(每个元素是-3到12之间的数字)。
grades
:一个向量(每个元素都是7步长的数字)。
该函数必须四舍五入矢量等级中的每个元素,并以7步尺度返回最接近的等级:
gradesRounded
例如,如果函数获取矢量[8.2,-0.5]作为输入,则它必须返回四舍五入的等级[7,0],这是等级上最接近的数字。
我尝试了以下代码:
7-step-scale: Grades 12 10 7 4 02 00 −3
逐行运行代码时,出现以下错误:
import numpy as np
def roundGrade(grades):
trueGrades = np.array([12, 10, 7, 4, 2, 0, -3])
matrix = np.array([trueGrades, (len(grades)), 1])
index = np.argmin(np.abs(matrix.T - grades), axis=0)
gradesRounded = trueGrades[index]
return gradesRounded
我该如何解决这个问题?
答案 0 :(得分:0)
通常,调试代码的第一种方法应该是打印中间结果和关联的元数据(例如数组形状)。错误消息还应该告诉您,中间数组不具有您期望的形状。
话说回来,您的代码有几个问题。
matrix = np.array([trueGrades, (len(grades)), 1])
此行不执行您认为的操作。您要做的就是创建一个包含[12, 10, 7, 4, 2, 0, -3, 7, 1]
的新数组(通过将len(grades)
和1附加到trueGrades
数组中)。
我假设您真正想要的是通过添加单例尺寸来重塑 trueGrades
。可以这样做:
matrix = trueGrades.reshape(-1, 1) # matrix has shape (len(trueGrades), 1)
然后,为了使广播正常工作,您的grades
矢量需要相同数量的尺寸(2),因此您也需要重塑形状:
grades = grades.reshape(-1, 1)
以下方法可以正常工作,
def roundGrade(grades):
trueGrades = np.array([12, 10, 7, 4, 2, 0, -3])
matrix = trueGrades.reshape(-1, 1)
grades = grades.reshape(-1, 1)
index = np.argmin(np.abs(matrix.T - grades), axis=1)
gradesRounded = trueGrades[index]
return gradesRounded
>>> roundGrade(np.arange(-5, 15))
[-3 -3 -3 -3 0 0 2 2 4 4 4 7 7 7 10 10 12 12 12 12]