Как исправить: только целочисленные скалярные массивы могут быть преобразованы в скалярный индекс


Одна ошибка, с которой вы можете столкнуться при использовании Python:

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

Эта ошибка обычно возникает по одной из двух причин:

1. Вы попытались выполнить индексацию массива в списке.

2. Вы попытались объединить две матрицы, используя неправильный синтаксис.

В следующих примерах показано, как избежать этих ошибок в обоих сценариях.

Пример 1. Вы попытались выполнить индексацию массива в списке.

Предположим, мы пытаемся использовать следующий код для создания линейной диаграммы в matplotlib с легендой и метками:

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

Мы получаем сообщение об ошибке, потому что попытались использовать индексацию массива в списке.

Чтобы избежать этой ошибки, мы должны сначала преобразовать список в массив NumPy, используя np.array() следующим образом:

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

На этот раз мы можем случайным образом выбрать два значения из списка без каких-либо ошибок, поскольку мы сначала преобразовали список в массив NumPy.

Пример 2. Вы попытались объединить две матрицы, используя неправильный синтаксис.

Предположим, мы пытаемся использовать следующий код для объединения двух матриц 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
np.concatenate (mat1, mat2)

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

Мы получаем ошибку, потому что нам не удалось передать матрицы в виде кортежа в функцию concatenate() .

Чтобы избежать этой ошибки, мы должны использовать двойные круглые скобки для предоставления матриц в виде кортежа функции concatenate() следующим образом:

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
np.concatenate ((mat1, mat2))

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

На этот раз мы можем соединить две матрицы без ошибок.

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Как исправить KeyError в Pandas
Как исправить: ValueError: невозможно преобразовать число с плавающей запятой NaN в целое число
Как исправить: ValueError: операнды не могли транслироваться вместе с фигурами

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.