scipy.optimize.lsq_线性边界误差

bpy*_*hon 4 python arrays tuples numpy scipy

我试图提出以下公式:

http://docs.scipy.org/doc/scipy/reference/ generated/scipy.optimize.lsq_linear.html#scipy.optimize.lsq_linear

我有以下代码,但它不接受 6 个单独变量的边界,它只接受一个元组,这使得所有变量的边界都相同。

## cut benchmark out of data
benchmark_ser = data_df.ix[:,0]
##  get out the stocks data
stocks_df = data_df.ix[:,1:]

## create/get bounds
bds = (0,.2) # <- i want to change this line 
             #    to something that will provide 
             #    a bound for each variable like 
             #    [(0,.1),(0,.2),(0,.5),(0,.6)]

wgt_arr = sp.optimize.lsq_linear(stocks_df, benchmark_ser, bds)
Run Code Online (Sandbox Code Playgroud)

我目前收到以下错误:

ValueError: 'bounds' must contain 2 elements.
Run Code Online (Sandbox Code Playgroud)

谢谢

tmd*_*son 6

来自文档(强调我的):

bounds : 类似 array 的 2 元组,可选

自变量的下限和上限。默认为无限制。每个数组必须具有形状 (n,) 或为标量,在后一种情况下,所有变量的界限都相同。与适当的符号一起使用np.inf可禁用所有或部分变量的界限。

因此,您需要一个由两个类似数组的对象组成的元组,而不是给它一个元组列表(lower_bound, upper_bound):(1) 所有下限和 (2) 所有上限

尝试从

bds = [(0,.1),(0,.2),(0,.5),(0,.6)]
Run Code Online (Sandbox Code Playgroud)

bds = ([0., 0., 0., 0.], [.1, .2, .5, .6])
Run Code Online (Sandbox Code Playgroud)