numpy数组:IndexError:数组的索引太多了

时间:2017-12-09 22:06:49

标签: python numpy

这有效:

>>> a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
>>> a[: , 2]
array([ 3,  7, 11])

这不是

>>> a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11]])
>>> a[:,2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: too many indices for array

为什么会这样?

3 个答案:

答案 0 :(得分:7)

Numpy ndarrays适用于所有元素具有相同的长度。在这种情况下,您的第二个数组不包含相同长度的列表,因此它最终是一个列表的一维数组,而不是“正确的”二维数组。

来自N-dimensional arrays上的Numpy文档:

  

ndarray是一个(通常是固定大小的)多维容器,包含相同类型和大小的项目。

a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
a.shape # (3,4)
a.ndim # 2

b = np.array([[1,2,3,4], [5,6,7,8], [9,10,11]])
b.shape # (3,)
b.ndim # 1

This discussion可能有用。

答案 1 :(得分:2)

第一个数组具有形状(3,4),第二个数组具有形状(3,)。第二个数组缺少第二个维度。 np.array无法使用此输入来构造矩阵(或类似延长数组的数组)。它只能制作一系列列表。

>>> a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])

>>> print(a)
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]

>>> print(type(a))
<class 'numpy.ndarray'>


>>> b = np.array([[1,2,3,4], [5,6,7,8], [9,10,11]])

>>> print(b)
[list([1, 2, 3, 4]) list([5, 6, 7, 8]) list([9, 10, 11])]

>>> print(type(b))
<class 'numpy.ndarray'>

所以它们都是Numpy数组,但只有第一个可以被视为具有两个维度的矩阵。

答案 2 :(得分:0)

很容易看出问题所在。 尝试,

>>> a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
>>> a.shape

然后

>>>a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11]])
>>> a.shape

你会自己看到问题,如果是两个,形状是(3,)。因此索引太多了。