ValueError: operands could not be broadcast together with shapes (2,) (1640,)已解决
在量化交易数据处理中遇到一个问题
违反了ufunc的广播机制(有关广播概念,单开一篇详细介绍:传送虫洞)
广播机制如下:
当我们使用ufunc函数对两个数组进行计算时,ufunc函数会对这两个数组的对应元素进行计算,因此它要求这两个数组有相同的大小(shape相同)。如果两个数组的shape不同的话,会进行如下的广播(broadcasting)处理:
- 让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐
- 输出数组的shape是输入数组shape的各个轴上的最大值
- 如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错
- 当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第一组值
此例中的错误来自75行,0.903写错了一个标点,写成0,903导致,语法提醒的~以后一定要注意。
既然问题出在75行,但是为什么提示的是77行,因为在计算机眼睛里75行没有错,语法上并没错,只是不符合我们设定的逻辑而已。这里便引出“ , ”(逗号)这个符号的意义,比较复杂,我们专门开一篇来讲(传送虫洞)。