Como corrigir: apenas matrizes de tamanho 1 podem ser convertidas em escalares python


Um erro que você pode encontrar ao usar Python é:

 TypeError : only size-1 arrays can be converted to Python scalars

Este erro ocorre com mais frequência ao tentar usar np.int() para converter um array NumPy de valores flutuantes em um array de valores inteiros.

No entanto, esta função aceita apenas um único valor em vez de uma matriz de valores.

Em vez disso, você deve usar x.astype(int) para converter um array NumPy de valores flutuantes em um array de valores inteiros, porque esta função é capaz de aceitar um array.

O exemplo a seguir mostra como corrigir esse erro na prática.

Como reproduzir o erro

Suponha que criemos o seguinte array NumPy de valores flutuantes:

 import numpy as np

#create NumPy array of float values
x = np. array ([3, 4.5, 6, 7.7, 9.2, 10, 12, 14.1, 15])

Agora suponha que tentamos converter esse array de valores flutuantes em um array de valores inteiros:

 #attempt to convert array to integer values
n.p. int (x)

TypeError : only size-1 arrays can be converted to Python scalars 

Recebemos um TypeError porque a função np.int() aceita apenas valores únicos, não uma matriz de valores.

Como corrigir o erro

Para converter um array NumPy de valores flutuantes em valores inteiros, podemos usar o seguinte código:

 #convert array of float values to integer values
x. astype (int)

array([ 3, 4, 6, 7, 9, 10, 12, 14, 15])

Observe que o array de valores foi convertido para inteiros e não estamos recebendo nenhum erro porque a função astype() é capaz de manipular um array de valores.

Nota : Você pode encontrar a documentação completa da função astype() aqui .

Recursos adicionais

Os tutoriais a seguir explicam como corrigir outros erros comuns em Python:

Como corrigir KeyError em Pandas
Como corrigir: ValueError: não é possível converter float NaN em int
Como corrigir: ValueError: os operandos não puderam ser transmitidos com formas

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *