ValueError:操作数不能与形状(3,)(100,)一起广播

时间:2019-08-21 11:52:44

标签: python numpy

我需要解决此任务:

接口

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

我该如何解决这个问题?

1 个答案:

答案 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]