Сюрпризы типов данных NumPy, о которых следует знать аналитику
Работа с данными в NumPy сулит много преимуществ, но одновременно таит в себе тайны, незнание которых может привести к неприятным проблемам.
Так, к их числу относится работа со строками, на хранение которых NumPy выделяет определенную квоту, соответственно, ее превышение может привести к обрезанию. Вы не увидите ошибки, а просто получите некорректное значение, что опаснее по своим последствиям.
Так, создадим массив строк, попробуем изменить последний элемент и посмотрим на результат:
Как можно заметить, по умолчанию массиву присвоен dtype="<U4", определяющий порядок хранения байтов, тип и размер. U4 - unicode строка из 4 символов. Как следствие, попытка добавления в начало последнего элемента "0" к цели не приводит (происходит обрезание элемента).
Исправить ошибку можно увеличив максимальный размер строк, явно указав тип:
Альтернативным способом является задание типа object, который позволяет работать с массивом NumPy как со списком обычных объектов Python:
Однако это нивелирует преимущества быстрой обработки массивов в NumPy. В свою очередь, работа с объектами Python добавляет много накладных расходов. Убедиться в этом легко на примере арифметических операций: