numpy array: IndexError: too many indices for array

前端 未结 3 1978
盖世英雄少女心
盖世英雄少女心 2021-01-04 17:47

This works:

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

This doesn\'t

相关标签:
3条回答
  • 2021-01-04 18:27

    Numpy ndarrays are meant for all elements to have the same length. In this case, your second array doesn't contain lists of the same length, so it ends up being a 1-D array of lists, as opposed to a "proper" 2-D array.

    From the Numpy docs on N-dimensional arrays:

    An ndarray is a (usually fixed-size) multidimensional container of items of the same type and size.

    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 may be useful.

    0 讨论(0)
  • 2021-01-04 18:28

    It's simple to see what the problem is. Try,

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

    and then

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

    and you will see the problem yourself, that in case two, shape is (3,).Hence the too many indices.

    0 讨论(0)
  • 2021-01-04 18:32

    The first array has shape (3,4) and the second has shape (3,). The second array is missing a second dimension. np.array is unable to use this input to construct a matrix (or array of similarly-lengthed arrays). It is only able to make an array of lists.

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

    So they are both Numpy arrays, but only the first can be treated as a matrix with two dimensions.

    0 讨论(0)
提交回复
热议问题