import numpy as np
def function2(x):
return np.sum(x**2)
def 偏导(f,x):
h=1e-6
grad=np.zeros_like(x)
for idx in range(x.size):
tmp_val=x[idx]
x[idx]=tmp_val+h
f1=f(x)
x[idx]=tmp_val-h
f2=f(x)
grad[idx]=(f1-f2)/(2*h)
x[idx]=tmp_val
return grad
x=np.array([3.,4.])
print(偏导(function2,x))
这个的结果是[6. 8.]
但如果x换成[[3.],[4.]],结果就变成[[3.0000005],[4.0000005]]了
我发现问题好像出现在 grad[idx]=(f1-f2)/(2*h) 这一行,但这行只是一步除法,后面f1和f2也不是数组,应该和x没什么关系把