我想创建一个函数- 返回函数在特定点的梯度的载体

我try 过的-

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]不符合预期?

推荐答案

您需要确保您的numpy数组是float,而不是int.一个简单的方法是定义np.array([3.,4.])而不是np.array([3,4]).

解释:

如果有np.array([3,4]),您的数组就会有dtype=int.当您执行x[idx] = tmp_val - h时,您实际上try 将2.999推入int数组,但您不能这样做,numpy会自动将其截断为2.

Python相关问答推荐

在有限数量的唯一字母的长字符串中,找到包含重复不超过k次的所有唯一字母的最长子字符串

如何从. text中进行pip安装跳过无法访问的库

使用decorator 重复超载

如何观察cv2.erode()的中间过程?

为什么dict(id=1,**{id:2})有时会引发KeyMessage:id而不是TypMessage?

如何使用Python中的clinicalTrials.gov API获取完整结果?

在上下文管理器中更改异常类型

提取两行之间的标题的常规表达

Pandas 都是(),但有一个门槛

Python中绕y轴曲线的旋转

如果值发生变化,则列上的极性累积和

关于Python异步编程的问题和使用await/await def关键字

转换为浮点,pandas字符串列,混合千和十进制分隔符

如何保持服务器发送的事件连接活动?

用砂箱开发Web统计分析

Plotly Dash Creating Interactive Graph下拉列表

名为__main__. py的Python模块在导入时不运行'

ConversationalRetrivalChain引发键错误

如何获取Python synsets列表的第一个内容?

交替字符串位置的正则表达式