'IndexError: only integers, slices (`:`), ellipsis (`...`)' ...?

问题描述

这个错误有很多问题,但是我一直没能在我的代码中找到问题的根源在哪里。我的代码如下:

for i in segs:
    if relDiff(segs[i+1],segs[i]) > 0.05:
        arr_x[i] = 0; arr_y[i] = 0

我在第三行收到错误IndexError: only integers,slices (:),ellipsis (...),numpy.newaxis (None) and integer or boolean arrays are valid indices

segs一个数组,而 relDiff 是我制作的一个计算相对差异的函数。这是那个函数

def relDiff(x,x_ref):
    return np.abs((x-x_ref)/x_ref)

非常感谢任何帮助!

解决方法

由于您使用 segs 中的项作为 arr_xarr_y 的索引,因此 segs 必须是整数列表/数组。否则,您必须将每个项目转换为整数,例如 arr_x[int(i)]。在您的程序中这样做是否合乎逻辑由您决定,因为您的要求是未知的。我们不知道 segs 包含什么。

,

试试这个:

for i in segs:
    print(i)
    segs[i]

问题应该很明显了!

In [317]: x = np.array([1.2,3.2,.5])
In [318]: for i in x:
     ...:     print(i)
     ...:     x[i]
     ...: 
1.2
Traceback (most recent call last):
  File "<ipython-input-318-41c2ba7b6f7d>",line 3,in <module>
    x[i]
IndexError: only integers,slices (`:`),ellipsis (`...`),numpy.newaxis (`None`) and integer or boolean arrays are valid indices

In [319]: x[1.2]
Traceback (most recent call last):
  File "<ipython-input-319-28ffb042b45f>",line 1,in <module>
    x[1.2]
IndexError: only integers,numpy.newaxis (`None`) and integer or boolean arrays are valid indices

如果您必须按索引进行迭代(此处可能不需要),请使用 range:

In [321]: for i in range(len(x)):
     ...:     print(i)
     ...:     print(x[i])
     ...: 
     ...: 
0
1.2
1
3.2
2
0.5