我正在使用这个简单的函数来使用数值方法确定函数的渐变。
def f_prime((x,y),delta=0.1):
'''Numerically derive the gradient of f(x,y).'''
x = int((x,y)[:1])
y = int((x,y)[1:])
df_dx = (f((x+delta,y))-f((x-delta,y)))/(2*delta)
df_dy = (f((x,y+delta))-f((x,y-delta)))/(2*delta)
return numpy.array((df_dx,df_dy))
这给出了错误反馈:
File "J:\...\.py", line 32, in f_prime
def f_prime((x,y),delta=0.1):
TypeError: int() argument must be a string or a number, not 'tuple'
我是如何将它变成元组的,以及如何不这样做?提前致谢
答案 0 :(得分:3)
(1, 2)[1:]
#>>> (2,)
(1, 2)[1]
#>>> 2
你正在切片而不是索引; slicing返回一个子集合,而indexing返回一个项目。
答案 1 :(得分:2)
如果你像在代码中那样使用切片索引(x,y)[:1],你会得到一个切片元组。你必须指定确切的索引,或者如果知道你的元组中有多少值,你可以直接将你的元组解压缩到变量中(可能应该是这样):
def f_prime(t, delta=0.1):
'''Numerically derive the gradient of f(x,y).'''
x, y = map(int, t)
df_dx = (f((x+delta,y))-f((x-delta,y)))/(2*delta)
df_dy = (f((x,y+delta))-f((x,y-delta)))/(2*delta)
return numpy.array((df_dx,df_dy))