如何将2个矩阵放入scipy.optimize.minimize?

时间:2015-07-08 12:14:52

标签: python optimization scipy minimize

我使用scipy.optimize.minimize函数。 我的目的是获得w,z,最小化f(w,z)

m 矩阵的<{1}}和w n

z

f(w,z)是接收参数w和z。

我已经尝试过以下表格:

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

但是,最小化效果不佳。

将两个矩阵( n m )放入def f(x): w = x[0] z = x[1] ... minimize(f, [w,z]) 的有效表格是什么?

1 个答案:

答案 0 :(得分:5)

优化需要1D向量来优化。你走在正确的轨道上。您需要将您的论点展平为minimize,然后在f中,从x = np.reshape(x, (2, m, n))开始,然后提取wz,您就应该开展业务。< / p>

之前我遇到过这个问题。例如,同时优化多个不同类中的向量部分。我通常最终得到一个函数,它将事物映射到一维矢量,然后另一个函数将数据拉回到对象中,这样我就可以评估成本函数。如:

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