【问题标题】:IndexError: index 1 is out of bounds for axis 0 with size 1 (Python, NumPy)IndexError:索引 1 超出轴 0 的范围,大小为 1(Python,NumPy)
【发布时间】:2017-01-30 14:28:06
【问题描述】:

我正在使用 for 循环遍历 NumPy zeros 数组中的索引,并分配一些值为 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

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

任何人都可以看到我的代码中导致错误消息的缺陷吗?

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

提前致谢。

【问题讨论】:

  • 您的ystart1 开头。不应该以0开头吗?
  • 原来是这样,虽然我把它改成了 1 看看是否有什么不同,但我忘了改回来。我已将其编辑回 0。谢谢。

标签: python arrays numpy for-loop


【解决方案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]

【讨论】:

  • 非常感谢。我以为这会很简单!你能解释一下为什么会这样吗?我在代码的前面有使用“Z[xstart][ystart]”语法的for循环,这些循环工作得很好。
【解决方案2】:

使用linestart = {1: [175], 2: [865]},您可以定义一个包含单个条目的列表的字典。我相信您实际上希望字典包含整数。 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

【讨论】:

  • 是的,这正是我想要的。在这个特定的例子中,字典的每个键只包含一个条目,但是,在完整的代码中,我有多个字典,它们通过 raw_input 添加,有时每个键包含多个条目;这些字典需要使用列表,我也草率地继续为这本字典使用相同的格式。感谢您指出这一点。
  • 另外,感谢您提供较短的版本,它非常有帮助。
猜你喜欢
  • 2021-05-16
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
  • 2021-11-18
  • 2015-08-06
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
相关资源
最近更新 更多