我有一个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