只有整数、切片 (`:`)、省略号 (`…`)、numpy.newaxis (`None`) 和整数或布尔数组是有效索引

只有整数、切片 ( :)、省略号 ( ...)、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()将值转换为整数。

indexerror 只有整数切片省略号

下面是错误如何发生的示例。

主程序
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])

不能使用 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 除法运算符的结果是对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,最后一项的索引为-1or 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'>

类型

返回对象的类型。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: