意外的数值梯度值

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

我想创建一个函数 - 返回函数在特定点处的梯度向量

我尝试过的-

import numpy as np


def function_2(x):
    return x[0]**2 + x[1]**2

def numerical_gradient(f, x):
    h = 1e-4
    grad = np.zeros_like(x)
    for idx in range(x.size):
        tmp_val = x[idx]
        # f(x + h) 
        x[idx] = tmp_val + h
        fxh1 = f(x)

        # f(x - h) 
        x[idx] = tmp_val - h
        fxh2 = f(x)
    
        grad[idx] = (fxh1 - fxh2) / (2 * h)
        #  x[idx] original value
        x[idx] = tmp_val
    return grad

grd1 = numerical_gradient(function_2, np.array([3,4]))
print(grd1)

显示[25000 35000] 为什么它不是预期的[6.000xx 7.999x]?

your text

python function differentiation
1个回答
0
投票

您需要确保您的 numpy 数组是浮点数,而不是整数。一种简单的方法是定义

np.array([3.,4.])
insetad 于
np.array([3,4])

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