Выбор ответа Senior NumPy: массивы и векторизация обновлено
Переполнение целых в NumPy
Вопрос
Что выведет код на NumPy 2.x?
import numpy as np
a = np.array([200], dtype=np.uint8)
b = np.array([100], dtype=np.uint8)
print((a + b)[0])
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: 44. Массивы с фиксированным целым dtype переполняются молча и по модулю: 200 + 100 = 300, а в uint8 это 300 - 256 = 44.
Варианты ответа
300OverflowErrorна сложении44правильный ответ255
Разбор
Массивы с фиксированным целым dtype переполняются молча и по модулю: 200 + 100 = 300, а в uint8 это 300 - 256 = 44. Python-целые неограничены, но элементы массива нет. Насыщения до 255 не бывает. OverflowError в NumPy 2 бросается при создании массива из слишком большого Python-скаляра, а не при арифметике между элементами массивов. Вывод: при агрегатах по маленьким типам приводите к int64.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «NumPy: массивы и векторизация»
- Что значит axis=0
- Broadcasting: форма результата
- Обрезка выбросов по перцентилям
- Скользящее среднее через cumsum
- Попарные расстояния через broadcasting
- Стандартизация столбцов матрицы (z-score)
- Запись float в целочисленный массив
- Fancy indexing возвращает копию