У меня есть функция в Python, которая берет вектор и возвращает действительное число.Я использую функции fip и fmin_bfgs scipy.optimize, чтобы найти аргумент, который дает функции приблизительное минимальное значение.Однако, когда я использую fmin, я получаю правильный ответ (довольно медленно), но когда я переключаюсь на fmin_bfgs, я получаю сообщение об ошибке «Матрицы не выровнены».Вот моя функция:
def norm(b_):
b_ = b_.reshape(int(M),1) #M already given elsewhere
Yb = np.dot(Y,b_) #Y already given elsewhere
B = np.zeros((int(M),int(M)))
for j in xrange(int(M)):
B[j][j] = -t[j+1]*np.exp(-t[j+1]*Yb[j]) #The t[j] are already known
P = np.zeros((int(M),1))
for j in xrange(int(M)):
P[j][0] = np.exp(-t[j+1]*Yb[j])
diff = np.zeros((int(M),1)) #Functions d(i,b) are known
for i in xrange(1,int(M)-1):
diff[i][0] = d(i+1,b_) - d(i,b_)
diff[0][0] = d(1,b_)
diff[int(M)-1][0] = -d(int(M)-1,b_)
term1_ = (1.0/N)*(np.dot((V - np.dot(c,P)).transpose(),W))
term2_ = np.dot(W,V - np.dot(c,P)) #V,c,P,W already known
term1_ = np.dot(term1_,term2_)
term2_ = lambd*np.dot(Yb.transpose(),diff)
return term1_ + term2_
Вот как я вызываю fmin_bfgs:
fmin_bfgs(norm, b_guess,fprime=None,
args=(),gtol=0.0001,norm=0.00000000001,
epsilon=1.4901161193847656e-08,maxiter=None,
full_output=0, disp=1, retall=0, callback=None)
Когда я вызываю fmin, он работает нормально, слишком медленно, чтобы быть полезным (мне нужно оптимизировать несколько раз),Но когда я пытаюсь использовать fmin_bfgs, я получаю эту ошибку:
Traceback (последний вызов был последним): файл "C: \ Program Files \ Wing IDE 101 4.0 \ src \ debug \ tserver_sandbox.py", строка 287, вФайл модуля "C: \ Python27 \ Lib \ site-packages \ scipy \ optimize \ optimize.py", строка 491, в файле fmin_bfgs old_fval, old_old_fval) Файл "C: \ Python27 \ Lib \ site-packages \ scipy \ optimize \ linesearch".py ", строка 239, в line_search_wolfe2 derphi0, c1, c2, amax) Файл" C: \ Python27 \ Lib \ site-packages \ scipy \ optimize \ linesearch.py ", строка 339, в scalar_search_wolfe2 phi0, derphi0, c1,c2) Файл "C: \ Python27 \ Lib \ site-packages \ scipy \ optimize \ linesearch.py", строка 471, в _zoom derphi_aj = derphi (a_j) Файл "C: \ Python27 \ Lib \ site-packages \ scipy \"optimize \ linesearch.py ", строка 233, в derphi return np.dot (gval [0], pk) ValueError: матрицы не выровнены
Есть идеи, почему это может произойти?Все матрицы, которые я предоставил функции, выровнены правильно (и функция работает, так как fmin работал).Помощь очень ценится!