2015-07-08 2 views
2

Я работаю с функцией scipy.optimize.minimize. Моя цель получить w,z, который минимизирует f(w,z)Как положить 2 матрицы в scipy.optimize.minimize?

Оба w и z являются п по м матрицы:

[[1,1,1,1], 
[2,2,2,2]] 

е (ш, г) получают параметр ш и г.

Я уже пробовал форму ниже:

def f(x): 
    w = x[0] 
    z = x[1] 
    ... 

minimize(f, [w,z]) 

, но свести к минимуму не работает.

Что такое действительная форма поставить две матрицы (п по м) в scipy.optimize.minimize?

ответ

1

Оптимизация требует 1D-вектора для оптимизации. Ты на правильном пути. Вам нужно сгладить ваш аргумент до minimize, а затем в f, начните с x = np.reshape(x, (2, m, n)), затем вытащите w и z, и вы должны быть в бизнесе.

Я столкнулся с этим вопросом раньше. Например, оптимизация частей векторов в нескольких разных классах одновременно. Обычно я завершаю функцию, которая сопоставляет вещи с 1D-вектором, а затем другую функцию, которая выводит данные обратно в объекты, поэтому я могу оценить функцию стоимости. Как и в случае:

def toVector(w, z): 
    assert w.shape == (2, 4) 
    assert z.shape == (2, 4) 
    return np.hstack([w.flatten(), z.flatten()]) 

def toWZ(vec): 
    assert vec.shape == (2*2*4,) 
    return vec[:2*4].reshape(2,4), vec[2*4:].reshape(2,4) 

def doOptimization(f_of_w_z, w0, z0): 
    def f(x): 
     w, z = toWZ(x) 
     return f_of_w_z(w, z) 

    result = minimize(f, toVec(w0, z0)) 
    # Different optimize functions return their 
    # vector result differently. In this case it's result.x: 
    result.x = toWZ(result.x) 
    return result 
Смежные вопросы