2011-09-27 2 views
0

파이썬에서 벡터를 취하여 실수를 반환하는 함수가 있습니다. scipy.optimize fmin 및 fmin_bfgs 함수를 사용하여 함수에 대략적인 최소값을 제공하는 인수를 찾습니다. 그러나, 내가 fmin_bfgs로 전환했을 때, 나는 (아주 천천히) 괜찮은 대답을 얻었지만, 나는 "매트릭스가 정렬되지 않았다"라는 에러 메시지를 받는다. 나는 그것이 잘 작동 FMIN 호출 할 때파이썬에서의 최소화 문제, fmin_bfgs는 작동하지 않지만 fmin은 '매트릭스 정렬되지 않음'

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) 

, 너무 느리게 (나는 몇 시간을 최적화 할 필요) 유용하게 :

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 시도하면이 오류가 발생합니다 :

추적 (가장 최근 호출 마지막) : "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 \ line search.py ​​", line 239, line_search_wolfe2 derphi0, c1, c2, amax) 파일"C : \ Python27 \ Lib \ site-packages \ scipy \ optimize \ linesearch.py ​​", 339 행, scalar_search_wolfe2에서 phi0, derphi0,파일 "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가 반환됩니다. ValueError : 행렬이 정렬되지 않았습니다.

왜 이런 일이 일어날 수 있으십니까? 함수를 제공 한 모든 행렬은 올바르게 정렬됩니다 (함수는 fmin이 작동 한 이후로 작동합니다). 많은 도움을 주셨습니다!

+0

내가 전화를 걸었을 때 어떤 숫자가 너무 커서 커지거나 너무 작아 졌다고 생각합니다. 어쨌든 해결 방법이 있으므로 답변 할 필요가 없습니다. – Derek

답변

1

프로그램 중 하나가 방금 처리하기에 너무 큰 숫자를 처리 한 것으로 보입니다. 부끄러운 일이 제대로 수행되고 있다고 말할 수 없었습니다. 나는 그 문제를 해결했지만 더 이상 문제는 없었다. 죄송합니다. 시간 낭비 일뿐입니다.

관련 문제