我在python中有一个函数,它接受一个向量并返回一个实数。我使用scipy.optimize fmin和fmin_bfgs函数来查找赋予函数近似最小值的参数。但是,当我使用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时,我收到了这个错误:
追踪(最近一次通话): 模块中的“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中返回np.dot(gval [0],pk) ValueError:矩阵未对齐
为什么会出现这种情况的任何想法?我提供函数的所有矩阵都是正确对齐的(并且函数在fmin工作后起作用)。非常感谢!
答案 0 :(得分:1)
似乎其中一个程序最终处理的数据太大而无法处理。惭愧它无法告诉我这是正确的做法。我虽然解决了这个问题,所以没有问题了。对不起,如果这浪费了你的时间。