Ошибка IndexError: слишком много индексов в массиве python numpy

#python #python-3.x #numpy #scikit-learn

#python #python-3.x #numpy #scikit-learn

Вопрос:

Я создаю экспорт для модели классификатора и некоторых значений масштабирования. Под руководством аспиранта, изучающего эту область, он предоставил мне код, который создает словарь масштабирования для нашего использования. Соответствующий код:

 PROBA_RESCALING_N_SAMPLES = 100
PROBA_RESCALING_WINDOW_RADIUS = 0.05
y_proba = classifier.predict_proba(x)
y_proba_rescaling = {proba: y[np.abs(y_proba - proba) <= PROBA_RESCALING_WINDOW_RADIUS].mean() for proba in np.linspace(0, 1, PROBA_RESCALING_N_SAMPLES)}
  

Ошибка возникает в последней строке, и в ней говорится:

Ошибка IndexError: слишком много индексов для массива

Я просмотрел форумы здесь, чтобы найти ответы на некоторые вопросы, и сидел с другом более часа, и все же я не мог понять, почему была вызвана эта ошибка. Вчера код казался нормальным, и вдруг сегодня он прослушивается.

РЕДАКТИРОВАТЬ: я пропустил пару важных деталей, о которых забыл упомянуть:
1. переменная Y — это массив, содержащий нули и единицы, он представляет ось Y в моем наборе данных для обучения ML.
2. Я сузил проблему до y[np.abs(y_proba - proba) <= PROBA_RESCALING_WINDOW_RADIUS] части. Запуск его сам по себе приводит к ошибке.

Комментарии:

1. Единственная индексация в этой строке y[...] . Почему вы ничего не рассказали нам об этом массиве? Информация о других массивах / переменных в выражении может помочь. А еще лучше, предоставьте минимальный пример, который генерирует ошибку.

2. Спасибо за комментарий! Я исправил свои ошибки и надеюсь, что это будет более понятно.

3. Что такое shape of y ? Что np.abs(y_proba - proba) <= PROBA_RESCALING_WINDOW_RADIUS производит? (форма, dtype)?

Ответ №1:

 y[np.abs(y_proba - proba) <= PROBA_RESCALING_WINDOW_RADIUS]
  

Вы имеете в виду:

 y[np.abs(y_proba - proba)] <= PROBA_RESCALING_WINDOW_RADIUS
  

Где изменилось место скобки? Вы индексируете сравнение в списке Y. Это не совсем имеет смысл.

Комментарии:

1. Нет, я индексирую логическое значение. Сравнение возвращает значение — True или False.

2. Вы должны попытаться распечатать каждую из частей сравнения и посмотреть, что они вам дают. Они не могут быть просто числом… Попробуйте выполнить : print(np.abs(y_proba — proba)) и print(PROBA_RESCALING_WINDOW_RADIUS) и вернитесь с результатом.