IndexError:索引1超出轴0的大小为1(Python,NumPy)

时间:2017-01-30 14:28:07

标签: python arrays numpy for-loop

我使用for循环遍历NumPy零数组中的索引并分配一些值为0.5的索引。目前,我的代码返回错误消息:

  

IndexError:索引1超出轴0的大小为1

以下是我的代码的简化版本,它会重现错误。

import numpy as np

Z = np.zeros((1560, 1560))
linestart = {1: [175], 2: [865]}
noycuts = 2

cutno = int(0)
for i in range(noycuts):
    cutno = cutno + 1
    xstart = linestart[cutno]
    ystart = 0
    for j in range(1560):
        Z[xstart][ystart] = 0.5
        ystart = ystart + 1

我已经检查过具有相同错误代码的人的问题,尽管这些问题似乎源于最初调用数组的方式;我不认为这是我的问题。

有人能看到我的代码中导致错误消息的缺陷吗?

我希望我提供了足够的信息。

提前致谢。

2 个答案:

答案 0 :(得分:1)

编辑:

我原来的回答是:

替换

Z[xstart][ystart] = 0.5

Z[xstart, ystart] = 0.5

但实际上,问题是,你的xstart是一个数组。保留原始代码,但替换

linestart = {1: [175], 2: [865]}

linestart = {1: 175, 2: 865}

或者,更好:

linestart = [175, 865]

答案 1 :(得分:0)

使用linestart = {1: [175], 2: [865]},您可以定义包含单个包含列表的dict。我相信你真的希望dict包含int。 ystart也应该从零开始。以下是否符合您的要求:

import numpy as np

Z = np.zeros((1560, 1560))
linestart = {1: 175, 2: 865}
noycuts = 2

cutno = 0
for i in range(noycuts):
    cutno += 1
    xstart = linestart[cutno]
    ystart = 0
    for j in range(1560):
        Z[xstart][ystart] = 0.5
        ystart = ystart + 1

还要考虑以下更短的版本:

for cutno,xstart in linestart.items():
    for ystart in range(Z.shape[1]):
        Z[xstart][ystart] = 0.5