Python 梯度(2d)搜索函数返回无。有什么问题?

Python 梯度(2d)搜索函数返回无。有什么问题?,python,function,gradient,nonetype,Python,Function,Gradient,Nonetype,我有一个函数,它应该返回一个梯度 def numerical_derivative_2d(func, epsilon): def grad_func(x): grad_func = (func(x + np.array([epsilon, 0])) - func(x)) / epsilon, (func(x + np.array([0, epsilon])) - func(x)) / epsilon return grad_func 但是当计算某一点的梯度时,我

我有一个函数,它应该返回一个梯度

def numerical_derivative_2d(func, epsilon):
    def grad_func(x):
        grad_func = (func(x + np.array([epsilon, 0])) - func(x)) / epsilon, (func(x + np.array([0, epsilon])) - func(x)) / epsilon
    return grad_func
但是当计算某一点的梯度时,我得不到任何结果

t1 = lambda x: (
            -1 / ((x[0] - 1)**2 + (x[1] - 1.5)**2 + 1)
            * np.cos(2 * (x[0] - 1)**2 + 2 * (x[1] - 1.5)**2))
t2 = numerical_derivative_2d(t, 0.1)
t3 = t2([3, 4])
对象类:t1函数,t2函数,t3无(我想得到一个二维点)

请告诉我怎么换这条线

    grad_func = (func(x + np.array([epsilon, 0])) - func(x)) / epsilon, (func(x + np.array([0, epsilon])) - func(x)) / epsilon
让它工作

另外,我知道有内置的计算梯度的方法。但这是其中一门课的家庭作业。我想了解错误并根据模板执行

PPS。这可能是不必要的,但我将给出一个单变量函数的任务示例,该函数按照我的预期工作

def numerical_derivative_1d(func, epsilon):
    def deriv_func(x):
        return (func(x + epsilon) - func(x)) / epsilon      
    return deriv_func

def polynom_to_prime(x):
    return 20 * x**5 + x**3 - 5 * x**2 + 2 * x + 2.0

t2 = numerical_derivative_1d(polynom_to_prime, 1e-5)
t3 = t2(3)
t3是一个数字(点),而不是无。在
def grad_func(x)
中,您不返回任何内容。在该函数中,
grad_func
是一个局部变量。考虑这样写:

def numerical_derivative_2d(func, epsilon):
    def grad_func(x):
        return (func(x + np.array([epsilon, 0])) - func(x)) / epsilon, (func(x + np.array([0, epsilon])) - func(x)) / epsilon
    return grad_func