Python 中 IndexError: too many indices for array 错误

当我们在访问一维 numpy 数组时指定过多的索引值时,会出现 Python“IndexError: too many indices for array”。 要解决此错误,需要声明一个二维数组或更正索引访问器。

下面是一个产生上述错误的示例代码

import numpy as np

arr = np.array([1, 2, 3])

print(arr.shape) # ?️ (3, )  ?️ this is one-dimensional array

# ⛔️ IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed
print(arr[:, 0])

Python 中 IndexError: too many indices for array 错误

我们有一个一维 numpy 数组,但指定了 2 个导致错误的索引。

如果我们有一个一维数组,则可以使用单个索引或切片。

import numpy as np

arr = np.array([1, 2, 3])

print(arr[0])  # ?️ 1
print(arr[0:2])  # ?️ [1 2]

我们可以改为声明一个二维 numpy 数组。

import numpy as np

arr = np.array([[1, 2], [3, 4], [5, 6]])

print(arr.shape)  # ?️ (3, 2) ?️ this is two-dimensional array

print(arr[:, 0])  # ?️ [1 3 5]

上面的示例使用 2 个索引来获取每个嵌套数组的第一个元素。

如果我们只有一个一维数组,请在访问它时使用单个索引,例如 arr[0] 或 arr[0:3]。

错误的另一个常见原因是声明一个二维数组,其中并非所有嵌套数组都具有相同类型和大小的项目。

import numpy as np

# ?️ declared one-dimensional array (second nested list has only 1 item)
arr = np.array([[1, 2], [3], [5, 6]])

print(arr.shape)  # ?️ (3,)

# ⛔️ IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed
print(arr[:, 0])

numpy 数组是一个表示固定大小项目的多维同构数组的对象。

如果我们向第二个嵌套数组添加第二个项目,我们将声明一个二维数组。

import numpy as np

arr = np.array([[1, 2], [3, 4], [5, 6]])

print(arr.shape)  # ?️ (3, 2)

print(arr[:, 0])  # ?️ [1 3 5]

一旦声明了二维数组,就可以使用两个索引来访问嵌套数组中的项。

import numpy as np

arr = np.array([[1, 2], [3, 4], [5, 6]])


# ✅ 从前两个嵌套数组中获取第一项
print(arr[0:2, 0])  # ?️ [1 3]

# ✅ 从前两个嵌套数组中获取最后一项
print(arr[0:2, -1])  # ?️ [2 4]

总结

当我们在访问一维 numpy 数组时指定过多的索引值时,会出现 Python“IndexError: too many indices for array”。 要解决此错误,请声明一个二维数组或更正索引访问器。