切片阵列会留下元组吗?需要使用数组切片作为整数但int()不起作用

时间:2013-11-24 13:39:58

标签: python arrays numpy int tuples

我正在使用这个简单的函数来使用数值方法确定函数的渐变。

    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'

我是如何将它变成元组的,以及如何不这样做?提前致谢

2 个答案:

答案 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))