Come risolvere il problema: solo gli array scalari interi possono essere convertiti in indici scalari


Un errore che potresti riscontrare quando usi Python è:

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

Questo errore in genere si verifica per uno dei due motivi:

1. Hai tentato di eseguire l’indicizzazione dell’array su un elenco.

2. Hai tentato di concatenare due matrici utilizzando una sintassi errata.

Gli esempi seguenti mostrano come evitare questi errori in entrambi gli scenari.

Esempio 1: hai tentato di eseguire l’indicizzazione di un array su un elenco.

Supponiamo di provare a utilizzare il codice seguente per creare un grafico a linee in matplotlib con una legenda ed etichette:

 import numpy as np

#create a list of values
data = [3, 5, 5, 7, 8, 10, 12, 14]

#choose 3 random values from list
random_values = np. random . choice (range(len(data)), size= 2 )

#attempt to use indexing to access elements in list
random_vals = data[random_values. astype (int)]

#view results
random_vals

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

Stiamo ricevendo un errore perché abbiamo tentato di utilizzare l’indicizzazione dell’array su un elenco.

Per evitare questo errore, dobbiamo prima convertire l’elenco in un array NumPy utilizzando np.array() come segue:

 import numpy as np

#create a list of values
data = [3, 5, 5, 7, 8, 10, 12, 14]

#choose 3 random values from list
random_values = np. random . choice (range(len(data)), size= 2 )

#attempt to use indexing to access elements in list
random_vals = np. array (data)[random_values. astype (int)]

#view results
random_vals

array([5, 7])

Questa volta possiamo selezionare casualmente due valori dall’elenco senza alcun errore poiché abbiamo prima convertito l’elenco in un array NumPy.

Esempio 2: hai tentato di concatenare due matrici utilizzando una sintassi errata.

Supponiamo di provare a utilizzare il seguente codice per concatenare due matrici NumPy:

 import numpy as np

#create twoNumPy matrices
mat1 = np. matrix ([[3, 5], [5, 7]])
mat2 = np. matrix ([[2, 4], [1, 8]])

#attempt to concatenate both matrices
n.p. concatenate (mat1, mat2)

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

Stiamo ricevendo un errore perché non siamo riusciti a fornire le matrici come tupla alla funzione concatenate() .

Per evitare questo errore, è necessario utilizzare le doppie parentesi per fornire le matrici sotto forma di tupla alla funzione concatenate() come segue:

 import numpy as np

#create twoNumPy matrices
mat1 = np. matrix ([[3, 5], [5, 7]])
mat2 = np. matrix ([[2, 4], [1, 8]])

#attempt to concatenate both matrices
n.p. concatenate ((mat1, mat2))

matrix([[3, 5],
        [5, 7],
        [2, 4],
        [1, 8]])

Questa volta riusciamo a concatenare le due matrici senza errori.

Risorse addizionali

I seguenti tutorial spiegano come correggere altri errori comuni in Python:

Come correggere l’errore chiave nei Panda
Come risolvere il problema: ValueError: impossibile convertire float NaN in int
Come risolvere il problema: ValueError: non è stato possibile trasmettere gli operandi con le forme

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *