【问题标题】:Does sliced array leave a tuple? Need to use array slice as integer but int() won't work切片数组会留下一个元组吗?需要将数组切片用作整数但 int() 不起作用
【发布时间】:2023-03-10 01:20:02
【问题描述】:

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

    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'

任何想法我如何使它成为一个元组以及如何不这样做?提前致谢

【问题讨论】:

    标签: python arrays numpy int tuples


    【解决方案1】:
    (1, 2)[1:]
    #>>> (2,)
    
    (1, 2)[1]
    #>>> 2
    

    你是在切片而不是索引;切片返回一个子集合,而索引返回一个项目。

    【讨论】:

    • 太棒了!这么简单,谢谢。但是现在我在同一段代码中遇到另一个错误: df_dx = (f((x+delta,y))-f((x-delta,y)))/(2*delta) TypeError: can only concatenate tuple (不是“浮动”)元组有什么想法吗?
    【解决方案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))
    

    【讨论】:

      猜你喜欢
      • 2011-10-07
      • 2012-11-10
      • 2021-09-04
      • 2012-09-17
      • 2016-04-16
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 2023-03-26
      相关资源
      最近更新 更多