只有整数、切片 ( :
)、省略号 ( ...
)、numpy.newaxis ( None
) 和整数或布尔数组是有效索引
Only integers, slices (`:`), ellipsis (`…`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
Python“IndexError: only integers, slices ( :
), ellipsis ( ...
), numpy.newaxis ( None
) and integer or boolean arrays are valid indices”出现在我们使用不支持的类型索引 NumPy 数组时。
要解决该错误,请使用该类int()
将值转换为整数。
下面是错误如何发生的示例。
import numpy as np arr = np.array([1, 2, 3]) my_float = 1.0 # ⛔️ IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices print(arr[my_float])
我们使用浮点数来索引导致错误的 NumPy 数组。
使用int()
类将浮点数转换为整数
您可以使用该类int()
将浮点数转换为整数。
import numpy as np arr = np.array([1, 2, 3]) my_float = 1.0 print(arr[int(my_float)]) # 👉️ 2
int类返回一个由提供的数字或字符串参数构造的整数对象。
0
如果没有给出参数,则构造函数返回。
除法时使用floor除法//
得到整数
如果使用
除法运算符,通常可能会得到一个浮点值。
# 👇️ division print(10 / 5) # 👉️ 2.0 # 👇️ floor division print(10 // 5) # 👉️ 2
整数除法/
产生一个浮点数,而
整数除法 //
产生一个整数。
# 👇️ floor division always returns an integer result = 10 // 5 print(result) # 👉️ 2 print(type(result)) # 👉️ <class 'int'>
floor()
结果应用函数的数学除法。使用切片或整数数组来索引 NumPy 数组
您还可以使用切片或整数数组来索引 NumPy 数组。
import numpy as np arr = np.array([[1, 2], [3, 4], [5, 6]]) # ✅ get the first 2 elements in the array print(arr[0: 2]) # 👉️ [[1 2] [3 4]] # ----------------------------------------- # ✅ get the first element of each subarray print(arr[:, 0]) # 👉️ [1 3 5] # ----------------------------------------- # ✅ get the first element of the first two nested arrays print(arr[0:2, 0]) # 👉️ [1 3]
第一个示例选择 NumPy 数组中的前 2 个元素。
start
索引是包含的,而stop
索引是排他的。第二个示例选择每个嵌套数组中的第一个元素。
第三个示例选择前两个嵌套数组中的第一个元素。
Python 索引是从零开始的,因此数组中的第一项的索引为
0
,最后一项的索引为-1
or len(array) - 1
。
使用浮点数列表索引 NumPy 数组
当您使用浮点数列表索引 NumPy 数组时,也会引发此错误。
import numpy as np arr = np.array([[1, 2], [3, 4], [5, 6]]) a_list = [0.0, 2.0] # ⛔️ IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices print(arr[a_list])
请注意,列表中的值属于 类型float
,因此它们不能用于索引 NumPy 数组。
要解决该错误,请在使用列表索引数组之前将列表中的值转换为整数。
import numpy as np arr = np.array([[1, 2], [3, 4], [5, 6]]) a_list = [0.0, 2.0] a_list = [int(item) for item in a_list] # [[1 2] # [5 6]] print(arr[a_list])
我们使用
列表理解来迭代浮点数列表。
在每次迭代中,我们将浮点数转换为整数并返回结果。
最后一步是使用整数列表来索引 NumPy 数组。
检查变量存储的类型
如果不确定变量存储的类型,请使用内置type()
类。
my_float = 1.0 print(type(my_float)) # 👉️ <class 'float'>
类型
类
返回对象的类型。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息:
- IndexError:索引 0 超出了大小为 0 的轴 0 的范围
- IndexError:Python 中标量变量的索引无效
- IndexError:在 Python 中列出超出范围的分配索引
- 只有整数、切片 (
:
)、省略号 (...
)、numpy.newaxis (None
) 和整数或布尔数组是有效索引 - IndexError:从 Python 中的空列表中弹出 [已解决]
- 位置参数元组的替换索引 1 超出范围
- IndexError:Python 中的字符串索引超出范围 [已解决]
- IndexError:Python 中的数组索引过多 [已解决]
- IndexError:元组索引在 Python 中超出范围 [已解决]