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