numpy array: IndexError: te veel indices voor array

Dit werkt:

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

Dit niet

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

Waarom zo?


Antwoord 1, autoriteit 100%

Numpy ndarrays zijn bedoeld om alle elementen dezelfde lengte te geven. In dit geval bevat uw tweede array geen lijsten van dezelfde lengte, dus wordt het een 1-D-array van lijsten, in tegenstelling tot een “juiste” 2-D-array.

Van de Numpy-documenten op N-dimensionale arrays:

Een ndarray is een (meestal vaste grootte) multidimensionale container met items van hetzelfde type en dezelfde grootte.

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

Deze discussiekan nuttig zijn.


Antwoord 2, autoriteit 19%

De eerste array heeft vorm (3,4) en de tweede heeft vorm (3,). De tweede array mist een tweede dimensie. np.array kan deze invoer niet gebruiken om een matrix (of array van arrays van vergelijkbare lengte) te construeren. Het is alleen in staat om een array van lijsten te maken.

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

Het zijn dus beide Numpy-arrays, maar alleen de eerste kan worden behandeld als een matrix met twee dimensies.


Antwoord 3

Het is eenvoudig om te zien wat het probleem is.
Probeer,

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

en dan

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

en je zult zelf het probleem zien, dat in geval twee, vorm (3,) is. Vandaar de te veel indices.

Other episodes