Выбор ответа 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.

Варианты ответа

  1. 300
  2. OverflowError на сложении
  3. 44правильный ответ
  4. 255

Разбор

Массивы с фиксированным целым dtype переполняются молча и по модулю: 200 + 100 = 300, а в uint8 это 300 - 256 = 44. Python-целые неограничены, но элементы массива нет. Насыщения до 255 не бывает. OverflowError в NumPy 2 бросается при создании массива из слишком большого Python-скаляра, а не при арифметике между элементами массивов. Вывод: при агрегатах по маленьким типам приводите к int64.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.