通过N维数组迭代时的IndexError

时间:2016-09-24 19:31:48

标签: python arrays python-2.7 numpy python-2.x

如标题中所述,我在迭代n维数组时得到一个IndexError。我试图用代码做的是将矩阵的部分设置为0并保留其余的数据。

我也意识到在n维数组中选择一个元素应该是数组[row#] [column#],但这只是我的命名约定的一个问题,我将在稍后修复。但是,这些值是正确的。

currentMatrix = np.array(ast.literal_eval(safety.iloc[i]), dtype=np.int)
currentMatrix.shape = (27,15)

tpHeight = int(df['touchH'].iloc[i])
tpWidth = int(df['touchW'].iloc[i])

fullRows = np.arange(15)
fullColumns = np.arange(27)

beforeAreaColumns = np.arange(df['touchX'].iloc[i] - 1, dtype=np.int)
afterAreaColumns = np.arange(df['touchX'].iloc[i] + tpWidth - 1, dtype=np.int)

beforeAreaRows = np.arange(df['touchY'].iloc[i] - 1, dtype=np.int)
afterAreaRows = np.arange(df['touchY'].iloc[i] + tpHeight - 1, dtype=np.int)

print beforeAreaColumns #returns [0 1 2 3 4 5] at i = 0

currentMatrix[beforeAreaColumns][fullRows] = 0
currentMatrix[afterAreaColumns][fullRows] = 0
currentMatrix[fullColumns][beforeAreaRows] = 0
currentMatrix[fullColumns][afterAreaRows] = 0

我收到的错误是:

IndexError                                Traceback (most recent call last)
<ipython-input-114-342e7c1b89ae> in <module>()
     26     print beforeAreaColumns
     27     
---> 28     currentMatrix[beforeAreaColumns][fullRows] = 0
     29     currentMatrix[afterAreaColumns][fullRows] = 0
     30     currentMatrix[fullColumns][beforeAreaRows] = 0

IndexError: index 6 is out of bounds for axis 0 with size 6

根据我的理解,我收到错误,因为当只有6个位置时,代码试图在位置7中找到索引。但是,我不确定为什么当数组在索引5处停止时它会尝试索引6。

我尝试更改代码以便它使用for循环,例如:

for beforeAreaColumn in beforeAreaColumns:
    for fullRow in fullRows:
        currentMatrix[beforeAreaColumn][fullRow] = 0

但是我得到了同样的错误。上面的代码是在Python 2.7上编写和运行的。

0 个答案:

没有答案