【问题标题】:numpy array: IndexError: too many indices for arraynumpy数组:IndexError:数组索引过多
【发布时间】:2018-05-23 20:11:38
【问题描述】:

这行得通:

>>> 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

为什么会这样?

【问题讨论】:

  • @MatthewCurry 这是故意的。因此问题。为什么这很重要?
  • print(a) 表明 a 的解释不同 - 第一个是二维 numpy 数组,第二个是三个列表 [list([1, 2, 3, 4]) list([5, 6, 7, 8]) list([9, 10, 11])] 的一维数组。
  • Numpy 追求性能,因此必须设置类型。好久没用了,不过我猜是最后一个数组的类型不一样:长度是3而不是4。numpy不能做出正常的假设,所以会报错

标签: python numpy


【解决方案1】:

我也遇到了这个错误消息“IndexError: too many indices for array”,但不幸的是我尝试了错误, 语法错误: LA = np.array( 0 for i in range(20) )

注意:必须放置 [] 括号,例如, 正确的语法: LA = np.array ( [ 0 for i in range(20) ] )

【讨论】:

    【解决方案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 数组,但只有第一个可以被视为具有二维的矩阵。

    【讨论】:

      【解决方案3】:

      Numpy ndarray 意味着所有元素都具有相同的长度。在这种情况下,您的第二个数组不包含相同长度的列表,因此它最终成为列表的一维数组,而不是“正确的”二维数组。

      来自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 可能有用。

      【讨论】:

      • 我使用np.pad()“固定”了长度,但我仍然无法索引它。有什么帮助吗?
      【解决方案4】:

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

      >>> 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,)。因此索引太多。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-26
        • 2020-03-04
        • 2019-07-17
        • 2020-09-14
        相关资源
        最近更新 更多