Como corrigir: apenas matrizes escalares inteiras podem ser convertidas em índice escalar


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

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

Esse erro geralmente ocorre por um de dois motivos:

1. Você tentou realizar a indexação de array em uma lista.

2. Você tentou concatenar duas matrizes usando sintaxe incorreta.

Os exemplos a seguir mostram como evitar esses erros em ambos os cenários.

Exemplo 1: Você tentou realizar a indexação de array em uma lista.

Suponha que estejamos tentando usar o seguinte código para criar um gráfico de linhas em matplotlib com legenda e rótulos:

 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

Estamos recebendo um erro porque tentamos usar a indexação de array em uma lista.

Para evitar esse erro, devemos primeiro converter a lista em um array NumPy usando np.array() da seguinte maneira:

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

Desta vez podemos selecionar aleatoriamente dois valores da lista sem nenhum erro, já que primeiro convertemos a lista em um array NumPy.

Exemplo 2: Você tentou concatenar duas matrizes usando sintaxe incorreta.

Suponha que tentemos usar o seguinte código para concatenar duas matrizes 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

Estamos recebendo um erro porque não conseguimos fornecer as matrizes como uma tupla para a função concatenate() .

Para evitar esse erro, você deve usar parênteses duplos para fornecer as matrizes em forma de tupla para a função concatenate() da seguinte maneira:

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

Desta vez conseguimos concatenar as duas matrizes sem erros.

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 *