2017-10-05 181 views
0

我在實施scipy.optimize.minimize()時遇到了一些麻煩。 它返回我與錯誤ValueError: Objective function must return a scalar。 這裏是我的代碼:麻煩實施scipy優化最小化

def cost(A,b,x): 
    return np.sum(np.square(np.dot(A,x)-b)) 

def sse(x): 
    return 1-sum(x) 

x0 = np.ones(4)/4 
bounds = tuple((0,1) for x in x0) 
cons = ({'type': 'eq', 'fun': sse}) 
All = minimize(cost, x0, args=(A, curve), method='SLSQP', bounds=bounds, constraints=cons).x 

A具有形狀(400,4)curve具有形狀(400,)xx0具有形狀(4,)

我似乎錯過了一些非常微不足道的東西。任何幫助,將不勝感激。提前致謝!

回答

0

您的函數的簽名以最小化需求作爲第一個非關鍵字參數x;那麼其他人可能會跟隨。

(所以你的內部變量映射是錯誤的,因此你的形狀產生不同的結果,形狀不標)

我還沒有看到你的代碼的任何使用curve!可能curve = b

所以只是改變:

def cost(A,b,x): # WRONG 
    return np.sum(np.square(np.dot(A,x)-b)) 

def cost(x, A, b): # CORRECT 
    return np.sum(np.square(np.dot(A,x)-b)) 
+0

謝謝!得到它了。另外,'curve'被傳遞給函數中的'b'變量。 –

+0

是的,但我不喜歡那些不同的名字。很難遵循imho。 – sascha

+0

啊!好的!將考慮到這一點。 –