TypeError:范围索引必须是整数或切片,而不是元组

时间:2019-11-20 21:46:34

标签: python python-3.x numpy

我的代码中有两个嵌套的for循环,但是其中一个起作用而另一个则不起作用,它们也是相同的,它发挥了我的作用

此代码有效

def nearest(furthestpoints,lastpoints,lastIDs,currentpoints,img,threshold = 30):
    currentIDs = np.empty(0,dtype = float)
    normList = np.empty(0,dtype = float)

    for i in range(0,len(currentpoints)):
        for a in range(0,len(lastpoints)):
            normList = np.append(normList,np.linalg.norm(currentpoints[i,:] - lastpoints[a,:]))```

但是此代码会产生错误

File "/home/oliver/tracker.py", line 22, in getLostPoints
    normList = np.append(normList,np.linalg.norm(current[i,:] - last[a,:]))
TypeError: range indices must be integers or slices, not tuple
def getLostPoints(last,lastIDs,current,threshold = 50):

    normList = np.empty(0,dtype = float)
    goodIDs = np.empty(0,dtype = int)
    lostPoints = np.empty((2,0),dtype = float)

    for i in range(0,len(last)):
        for a in range(0,len(current)):
            normList = np.append(normList,np.linalg.norm(current[i,:] - last[a,:]))

        if min(normList) < threshold:
            indexMin = np.argmin(normList)
            goodIDs = np.append(goodIDs,lastIDs[indexMin])
        normList = np.empty(0,dtype = float) 

这些只是循环,此代码还有更多内容

输入数组的形状为(n,2) 其中n是点数

2 个答案:

答案 0 :(得分:1)

我没有足够的声誉来发表评论,因此我必须将其发布为答案。

首先,您有:

    for i in range(0,len(current)):
        for a in range(0,len(current)):

您的意思是:

    for i in range(0,len(current)):
        for a in range(0,len(last)):

这将遵循与您的方法相同的模式。

您是否尝试过用第二种方法打印ia来进行健全性检查以及打印输入的特征(形状等)?这不是最有说服力的调试方式,但是打印值只是为了确保它们符合您的期望,这会很有见地。

答案 1 :(得分:0)

发现了一个问题,当我在主循环中调用代码时,这是一个简单的错误 现在工作正常,谢谢您的回答