TypeError: only integer scalar arrays can be converted to a scalar index with 1D numpy indices array
Perhaps the error message is somewhat misleading, but the gist is that X_train
is a list, not a numpy array. You cannot use array indexing on it. Make it an array first:
out_images = np.array(X_train)[indices.astype(int)]
I get this error whenever I use np.concatenate
the wrong way:
>>> a = np.eye(2)>>> np.concatenate(a, a)Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<__array_function__ internals>", line 6, in concatenateTypeError: only integer scalar arrays can be converted to a scalar index
The correct way is to input the two arrays as a tuple:
>>> np.concatenate((a, a))array([[1., 0.], [0., 1.], [1., 0.], [0., 1.]])
A simple case that generates this error message:
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
Some variations that work:
In [9]: [1,2,3,4,5][np.array(1)] # this is a 0d array indexOut[9]: 2In [10]: [1,2,3,4,5][np.array([1]).item()] Out[10]: 2In [11]: np.array([1,2,3,4,5])[np.array([1])]Out[11]: array([2])
Basic python list indexing is more restrictive than numpy's:
In [12]: [1,2,3,4,5][[1]]....TypeError: list indices must be integers or slices, not list
edit
Looking again at
indices = np.random.choice(range(len(X_train)), replace=False, size=50000, p=train_probs)
indices
is a 1d array of integers - but it certainly isn't scalar. It's an array of 50000 integers. List's cannot be indexed with multiple indices at once, regardless of whether they are in a list or array.