Saltar al contenido

python – TypeError: solo las matrices escalares enteras se pueden convertir a un índice escalar con una matriz de índices numéricos 1D

octubre 21, 2021
apple touch icon@2

Un caso simple que genera este mensaje de error:

In [8]: [1,2,3,4,5][np.array([1])]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-55def8e1923d> in <module>()
----> 1 [1,2,3,4,5][np.array([1])]

TypeError: only integer scalar arrays can be converted to a scalar index

Algunas variaciones que funcionan:

In [9]: [1,2,3,4,5][np.array(1)]     # this is a 0d array index
Out[9]: 2
In [10]: [1,2,3,4,5][np.array([1]).item()]    
Out[10]: 2
In [11]: np.array([1,2,3,4,5])[np.array([1])]
Out[11]: array([2])

La indexación básica de la lista de Python es más restrictiva que la de Numpy:

In [12]: [1,2,3,4,5][[1]]
....
TypeError: list indices must be integers or slices, not list

editar

Mirando de nuevo a

indices = np.random.choice(range(len(X_train)), replace=False, size=50000, p=train_probs)

indices es una matriz 1d de enteros, pero ciertamente no es escalar. Es una matriz de 50000 enteros. Las listas no se pueden indexar con varios índices a la vez, independientemente de si están en una lista o en una matriz.

close