我有一個python算法,它工作得很好。我輸入一個最小關鍵詞(「MinScore」),算法運行並預設結果。典型的MinScore值在0.2到0.99之間。Python Scipy的優化錯誤「ValueError:長度必須匹配比較」
但是爲什麼我使用scipy優化來嘗試找到MinScore值的最低算法輸出,出現以下錯誤:「ValueError:長度必須匹配才能比較」。
這是我如何調用優化功能:
Optimal_Score = spo.minimize(BRMalg, 0.81, method='SLSQP',
options={'disp':True}, bounds=[(-1.00,1.00)])
這是從優化過程中的algorthim錯誤:
MinHoldScore = MinScore
Stocks['HOLD'] = (Stocks['HOLD'].where(Stocks['Total Score'].shift(1) < MinScore, True).where(Stocks['Total Score'].shift(1) >= MinHoldScore, False).ffill().fillna(False).astype(bool))
這是完全錯誤消息:
> Traceback (most recent call last):
File "\\PYTHON CODE.py", line 327, in <module>
> Optimal_Score = spo.minimize(BRMalg, 0.81, method='SLSQP', options={'disp':True}, bounds=[(-1.00,1.00)])
File "C:\\scipy\optimize\_minimize.py",
> line 455, in minimize constraints, callback=callback, **options)
File "C:\Users\\scipy\optimize\slsqp.py",
> line 363, in _minimize_slsqp fx = func(x)
File "C:\Users\\scipy\optimize\optimize.py",
> line 289, in function_wrapper return function(*(wrapper_args + args))
File "T:\\PYTHON CODE.py", line 288, in BRMalg
> Stocks[Ticker]['HOLD'] = (Stocks[Ticker]['HOLD'].where(Stocks[Ticker]['TOTAL_SCORE_'+MarketIndex+'_'+str(BetaWindow)].shift(1) < MinBuyScore, True)
File "C:\Users\\pandas\core\ops.py",
> line 740, in wrapper raise ValueError('Lengths must match to compare') ValueError: Lengths must match to compare
任何想法?非常奇怪的是,當不使用SCIPY OPTIMIZE並且僅傳遞MinScore = 0.82的值時,它可以完美工作。
期待您的建議! :-)
感謝Vtour,但是where語句運行良好,我已經運行了很多次了,並且有了工作數據。我認爲問題出在我的scipy功能上? – cwse
錯誤表示您在聲明中比較了不同的長度: BRMalg股票[股票] ['持有'] =(股票[股票] ['持有']其中(股票[股票] ['TOTAL_SCORE_'+ MarketIndex +' _'+ str(BetaWindow)]。shift(1)
2016-11-11 03:58:16
感謝Vtour,這看起來像你可能正在做的事!目前在夏威夷,但將檢查我的回報:-) – cwse