Python ValueError:操作数无法与形状(3,)(100,)一起广播

Python ValueError:操作数无法与形状(3,)(100,)一起广播,python,numpy,Python,Numpy,我有一项任务需要解决: 接口 def圆形坡度(坡度): #在这里插入您的代码 回程坡度 输入参数 等级:一个向量(每个元素是介于−3和12) 返回值 gradesRounded:一个向量(每个元素都是7步标度上的一个数字) 描述 该函数必须对向量等级中的每个元素进行四舍五入,并返回7步刻度上最接近的等级: 7级:12级10级7级4级02 00−3. 例如,如果函数获取向量[8.2,-0.5]作为输入,则必须返回四舍五入的坡度[7,0],这是放坡比例上最接近的数字 我尝试了以下代码: 将num

我有一项任务需要解决:

接口
def圆形坡度(坡度):
#在这里插入您的代码
回程坡度
输入参数
等级
:一个向量(每个元素是介于−3和12)

返回值
gradesRounded
:一个向量(每个元素都是7步标度上的一个数字)

描述 该函数必须对向量等级中的每个元素进行四舍五入,并返回7步刻度上最接近的等级:

7级:12级10级7级4级02 00−3.
例如,如果函数获取向量[8.2,-0.5]作为输入,则必须返回四舍五入的坡度[7,0],这是放坡比例上最接近的数字

我尝试了以下代码:

将numpy导入为np
def圆形等级(等级):
trueGrades=np.数组([12,10,7,4,2,0,-3])
矩阵=np.数组([trueGrades,(len(grades)),1])
指数=np.argmin(np.abs(矩阵T-等级),轴=0)
gradesRounded=trueGrades[索引]
回程坡度
当我逐行运行代码时,出现以下错误:

index = np.argmin(np.abs(matrix.T - grades), axis=0)

ValueError: operands could not be broadcast together with shapes (3,) (100,) 

如何解决此问题?

通常,调试代码的第一种方法应该是打印中间结果和相关元数据(如数组形状)。错误消息还应该告诉您,您的中间数组没有您期望的形状

也就是说,您的代码有几个问题

matrix=np.array([trueGrades,(len(grades)),1])
这条线并不像你想象的那样。您在这里所做的就是创建一个新数组,其中包含
[12,10,7,4,2,0,-3,7,1]
(通过将
len(grades)
和1添加到
trueGrades
数组中)

我假设您真正想要的是通过添加单例维度来重塑
trueGrades
。可以这样做:

matrix=trueGrades.重塑(-1,1)#矩阵具有形状(len(trueGrades),1)
然后,为了使广播正常工作,您的
等级
向量需要相同数量的维度(2),因此您也需要对其进行重塑:

grades=grades.重塑(-1,1)
那么,以下方法很好:

def圆形坡度(坡度):
trueGrades=np.数组([12,10,7,4,2,0,-3])
矩阵=trueGrades。重塑(-1,1)
等级=等级。重塑(-1,1)
指数=np.argmin(np.abs(矩阵T-等级),轴=1)
gradesRounded=trueGrades[索引]
回程坡度
圆度(np.arange(-5,15)) [-3 -3 -3 -3 0 0 2 2 4 4 4 7 7 7 10 10 12 12 12 12]
通常,调试代码的第一种方法应该是打印中间结果和相关元数据(如数组形状)。错误消息还应该告诉您,您的中间数组没有您期望的形状

也就是说,您的代码有几个问题

matrix=np.array([trueGrades,(len(grades)),1])
这条线并不像你想象的那样。您在这里所做的就是创建一个新数组,其中包含
[12,10,7,4,2,0,-3,7,1]
(通过将
len(grades)
和1添加到
trueGrades
数组中)

我假设您真正想要的是通过添加单例维度来重塑
trueGrades
。可以这样做:

matrix=trueGrades.重塑(-1,1)#矩阵具有形状(len(trueGrades),1)
然后,为了使广播正常工作,您的
等级
向量需要相同数量的维度(2),因此您也需要对其进行重塑:

grades=grades.重塑(-1,1)
那么,以下方法很好:

def圆形坡度(坡度):
trueGrades=np.数组([12,10,7,4,2,0,-3])
矩阵=trueGrades。重塑(-1,1)
等级=等级。重塑(-1,1)
指数=np.argmin(np.abs(矩阵T-等级),轴=1)
gradesRounded=trueGrades[索引]
回程坡度
圆度(np.arange(-5,15)) [-3 -3 -3 -3 0 0 2 2 4 4 4 7 7 7 10 10 12 12 12 12]
尝试打印出
矩阵
等级
的形状……这是因为函数定义中
矩阵
的形状是3行1列。传递到函数中的
等级
是100,它们应该具有相同的大小以进行算术运算,如矩阵。T-gradesTry打印出
矩阵
等级
的形状…这是因为函数定义中的
矩阵
的形状是3行1列。传递到函数中的
等级
是100,它们应该具有相同的大小以进行算术运算,如matrix.T-grades