You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用*args实现多变量函数对不同维度求偏导的方法

多变量偏导函数扩展方案

核心修改思路

  • 给求导函数新增var_index参数,用来指定要对第几个位置参数求偏导,索引从0开始计数,默认设为0兼容原有调用逻辑
  • 将所有入参拼接为完整的参数列表,仅修改目标索引位置的参数值计算差分,其余参数保持原值不变

最终实现代码

def firstderivative(func, *args, var_index=0):
    args_list = list(args)
    # 计算+0.001处的函数值
    args_list[var_index] += 0.001
    f_plus = func(*args_list)
    # 计算-0.001处的函数值
    args_list[var_index] -= 0.002
    f_minus = func(*args_list)
    return (f_plus - f_minus) / 0.002

def afunc(x,y,z):
    return x*y + x*z + y*z

# 原调用逻辑,对x求偏导,输出约9.0
print(firstderivative(afunc, 2, 4, 5))
# 对第二个参数y求偏导,输出约7.0
print(firstderivative(afunc, 2, 4, 5, var_index=1))
# 对第三个参数z求偏导,输出约6.0
print(firstderivative(afunc, 2, 4, 5, var_index=2))

额外可选优化

如果想要支持按参数名求偏导,可以额外加一层参数名到索引的转换:

def firstderivative(func, *args, var_index=0, var_name=None):
    args_list = list(args)
    # 如果传了参数名,优先按参数名匹配索引
    if var_name is not None:
        var_names = func.__code__.co_varnames[:func.__code__.co_argcount]
        var_index = var_names.index(var_name)
    args_list[var_index] += 0.001
    f_plus = func(*args_list)
    args_list[var_index] -= 0.002
    f_minus = func(*args_list)
    return (f_plus - f_minus) / 0.002

# 按参数名求y的偏导,输出约7.0
print(firstderivative(afunc, 2,4,5, var_name='y'))

内容的提问来源于stack exchange,提问作者user121416

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:27:03