切片数组会留下元组吗?需要将数组切片用作整数,但int()不会

2024-09-30 06:22:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我用这个简单的函数,用数值方法来确定函数的梯度。你知道吗

    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'

你知道我是怎么把它变成元组的吗?提前谢谢


Tags: the方法函数dfdefprimeint数值
2条回答
(1, 2)[1:]
#>>> (2,)

(1, 2)[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))

相关问题 更多 >

    热门问题