我有一个函数
func(x)
,其中参数是长度为 n
的向量。我想最小化它相对于 i
的第 x
组件,同时保持其他组件固定。因此,为了将其表达为单个组件的函数,我会做类似的事情
import numpy as np
from scipy.optimize import minimize_scalar
def func(x):
#do some calculations
return function_value
def func_i(x_i, x0, i):
x = np.copy(x0)
x[i] = x_i
return func(x)
res = minimize_scalar(func_i, args=(x0, i))
有更有效的方法吗?这种计算会反复进行,循环遍历变量,我担心
x = np.copy(x0)
,x[i] = x_i
会减慢计算速度。 (问题出现在吉布斯采样的背景下,因此同时最小化所有变量并不是我想要的。)
一个可能的更快选项而不是完整的
x0
副本是要求函数将 x0
恢复到评估后发现的状态。
IOW func_i
变成:
def func_i(x_i, x0, i)
temp = x0[i]
x0[i] = x_i
result = func(x0)
x0[i] = temp
return result
这避免了复制到
x
,但需要 3 次额外的分配。我不知道你的数组的长度 x0
但我大胆猜测它会比 n
较大的长度的副本更快。