2013-11-03 2 views
1

안녕을위한 형상 불일치,scipy.optimize() 값 오류 : 나는 scipy 및 NumPy와 새로운 오전 합

I 클래스 할당에 대한 QP 문제를 해결 사용하려고

minimize x^t * H * x + f^t * x 
where x > 0 

경우 H 는 각 요소가 ak × k 차원 행렬이고 x이고 f가 2 × 1 벡터 인 2 × 2 블록 행렬이며 각 요소는 ak 차원 벡터입니다.

np.shape(H) = (2, 2, k, k) 
np.shape(x) = (2, k) 

내가 생각하는 기능은 다음

내 구현이있어 올바른 경우에도 나는 모양 불일치 오류가 점점 오전 :

def func(x): #This function runs perfectly ,returns a value 

    return 0.5 * np.tensordot(x, np.tensordot(H, x, axes=([1,3],[0,1]))) + np.tensordot(x,f) 

x_init = np.ones((2, k)) 

bnds = (0, None) 

theta = opt.minimize(func , x_init, bounds = bnds) 
# I get an error here. 
# ValueError: shape-mismatch for sum 

내가 뭔가를 분명 실종?

답변

1

x_initopt.minimize으로 병합되고있는 것이 문제입니다. 당신은 함수 내에서 x를 재편하여이를 해결할 수 있습니다 :

def func(x): 
    x = x.reshape(2, -1) 
    return 0.5 * np.tensordot(x, np.tensordot(H, x, axes=([1,3],[0,1]))) + np.tensordot(x,f) 

결과는 theta에 의해 캡처와 같은 모양 변경을 필요로하는, 또한 평평 볼 속성 theta.x에서 x 최적화되어 있습니다.

+1

고맙습니다. 어쩌면 내가 먼저 행렬과 벡터의 크기를 줄이는 것이 더 나을 것입니다. –

관련 문제