Python:最小化关于第 i 个变量的函数

问题描述 投票:0回答:1

我有一个函数

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
会减慢计算速度。 (问题出现在吉布斯采样的背景下,因此同时最小化所有变量并不是我想要的。)

python optimization vectorization
1个回答
0
投票

一个可能的更快选项而不是完整的

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
较大的长度的副本更快。

© www.soinside.com 2019 - 2024. All rights reserved.