如何将 2 矩阵放入 scipy.optimize.minimize?
How Do I put 2 matrix into scipy.optimize.minimize?
我使用 scipy.optimize.minimize
函数。
我的目的是得到 w,z
最小化 f(w,z)
w
和z
都是n乘m矩阵:
[[1,1,1,1],
[2,2,2,2]]
f(w,z)为接收参数w和z。
我已经尝试过下面给出的表格:
def f(x):
w = x[0]
z = x[1]
...
minimize(f, [w,z])
但是,最小化效果不佳。
将两个矩阵(n乘以m)放入scipy.optimize.minimize
的有效形式是什么?
优化需要一个一维向量来优化。你走在正确的轨道上。您需要将您的论点扁平化为 minimize
,然后在 f
中,从 x = np.reshape(x, (2, m, n))
开始,然后退出 w
和 z
,您应该开始做生意了。
我以前 运行 解决过这个问题。例如,同时优化多个不同 类 中的部分向量。我通常会得到一个将事物映射到一维向量的函数,然后是另一个将数据拉回到对象中的函数,这样我就可以评估成本函数。如:
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
我使用 scipy.optimize.minimize
函数。
我的目的是得到 w,z
最小化 f(w,z)
w
和z
都是n乘m矩阵:
[[1,1,1,1],
[2,2,2,2]]
f(w,z)为接收参数w和z。
我已经尝试过下面给出的表格:
def f(x):
w = x[0]
z = x[1]
...
minimize(f, [w,z])
但是,最小化效果不佳。
将两个矩阵(n乘以m)放入scipy.optimize.minimize
的有效形式是什么?
优化需要一个一维向量来优化。你走在正确的轨道上。您需要将您的论点扁平化为 minimize
,然后在 f
中,从 x = np.reshape(x, (2, m, n))
开始,然后退出 w
和 z
,您应该开始做生意了。
我以前 运行 解决过这个问题。例如,同时优化多个不同 类 中的部分向量。我通常会得到一个将事物映射到一维向量的函数,然后是另一个将数据拉回到对象中的函数,这样我就可以评估成本函数。如:
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