1. 程式人生 > >ValueError: operands could not be broadcast together with shapes (2,) (1640,)已解決

ValueError: operands could not be broadcast together with shapes (2,) (1640,)已解決

在量化交易資料處理中遇到一個問題

在這裡插入圖片描述

違反了ufunc的廣播機制(有關廣播概念,單開一篇詳細介紹:傳送蟲洞)

廣播機制如下:

當我們使用ufunc函式對兩個陣列進行計算時,ufunc函式會對這兩個陣列的對應元素進行計算,因此它要求這兩個陣列有相同的大小(shape相同)。如果兩個陣列的shape不同的話,會進行如下的廣播(broadcasting)處理:

  1. 讓所有輸入陣列都向其中shape最長的陣列看齊,shape中不足的部分都通過在前面加1補齊
  2. 輸出陣列的shape是輸入陣列shape的各個軸上的最大值
  3. 如果輸入陣列的某個軸和輸出陣列的對應軸的長度相同或者其長度為1時,這個陣列能夠用來計算,否則出錯
  4. 當輸入陣列的某個軸的長度為1時,沿著此軸運算時都用此軸上的第一組值

此例中的錯誤來自75行,0.903寫錯了一個標點,寫成0,903導致,語法提醒的~以後一定要注意。

既然問題出在75行,但是為什麼提示的是77行,因為在計算機眼睛裡75行沒有錯,語法上並沒錯,只是不符合我們設定的邏輯而已。這裡便引出“ , ”(逗號)這個符號的意義,比較複雜,我們專門開一篇來講(傳送蟲洞)。

  • 參考資料