NumPy广播错误:数组形状(6,)与(12,)无法运算问题排查
错误原因分析
- 问题根源在变量c的生成逻辑:你用了Python列表的
+运算符,它的作用是拼接两个列表,而非对应元素相加。A[1]和A[3]都是长度为6的列表,A[1]+A[3]会生成一个长度为12的新列表(两个列表首尾拼接),形状为(12,)。 - 你的prediction函数中,计算
A[i]与A[j]的组合时,应该是期望做元素-wise相加(对应位置数值相加,结果仍为长度6的序列),此时得到的结果形状是(6,)。 - 当函数尝试计算这个元素-wise相加结果与Q(即c)的范数差时,
(6,)和(12,)的序列无法进行numpy广播运算,因此触发了ValueError。
如果要修复这个问题,需要把c改成元素-wise相加的结果:
- 若使用numpy数组,先将A转换为numpy数组,再用
+运算符即可实现元素相加; - 若用原生列表,可通过列表推导式实现:
c = [x + y for x, y in zip(A[1], A[3])],这样得到的c是长度6的列表,就能和函数内的运算结果匹配。
内容的提问来源于stack exchange,提问作者Ali.A
相关产品推荐
相关产品推荐

