为什么IndexError:索引1超出大小为1的轴0的范围

时间:2018-10-07 05:58:31

标签: python python-3.x python-2.7 numpy

以下代码用于使用变量“ locs”给定位置x y坐标来查找图像的关键点。tp= 256,r = 180,c = 240。在调试期间,我收到 desc [idx-1,] = tmp 行的索引错误。

tp = compareX.shape[0]
desc = np.zeros((1, tp))
r = im.shape[0]
c = im.shape[1]
idx = 1
new_locs = np.zeros((locs.shape))


for i in range(1, locs.shape[0]):

    x = math.floor(locs[i - 1, 0])  # keypoint x coordinate
    y = math.floor(locs[i - 1, 1])  # keypoint y coordinate
    #non-maximum suppression 
    if (x - 4) < 1 or (y - 4) < 1 or (x + 4) > c or (y + 4) > r:
        continue

    #save passing coordinates
    new_locs[idx - 1,] = np.array([x, y])

    #Calculate BRIEF descriptor 
    tmp = np.zeros((1, tp))

    x = x-4
    y = y-4
    for j in range(1, tp):
        ax = x + math.floor((compareX[j-1]-1)/patchWidth)
        ay = y + ((compareX[j-1]-1) % patchWidth)
        bx = x + math.floor((compareY[j-1] - 1) / patchWidth)
        by = y + ((compareY[j-1] - 1) % patchWidth)
        if (im[ay, ax] < im[by, bx]).all():
            tmp[0, j-1] = 1
    ***desc[idx-1, ] = tmp***
    idx = idx + 1
locs = new_locs
return locs, desc

1 个答案:

答案 0 :(得分:0)

您已将desc设置为尺寸为1 x tp(将其视为1行,tp列)。

tp = 5

desc = np.zeros((1, tp))
# array([[ 0.,  0.,  0.,  0.,  0.]])

desc.shape 
# (1, 5)

使用零索引,这意味着当轴0(行轴)中只有一行时,引用desc[1, ]会请求第2行。
这就是为什么出现错误的原因:idx == 2时,然后desc[idx-1, ] == desc[1, ]
也许您想索引到轴1?例如。 desc[ ,1]