Рекомендуем
VPS на Windows и Linux — от 49 ₽ за 7 дней Быстрый запуск сервера на NVMe для сайтов, ботов и других задач.
Выбрать VPS

NumPy 2.5.4 устраняет зависания при работе с матрицами и ошибки сборки Windows

В NumPy 2.5.4, опубликованном 10 октября 2026 года, исправили зависания и некорректные результаты при обработке матриц с бесконечными значениями. Релиз затрагивает вычисления линейной алгебры, сборку библиотеки компилятором MSVC 19.51 на Windows и несколько ошибок в работе со строками и массивами.

NumPy устраняет зависания при работе с матрицами
NumPy устраняет зависания при работе с матрицами

NumPy больше не зависает на некоторых матрицах с бесконечностями

Вычисления numpy.linalg.svd и numpy.linalg.lstsq могли зависнуть, если в исходных данных встречалось значение inf — математическая бесконечность. Проблема проявлялась с некоторыми реализациями библиотеки LAPACK, которую NumPy использует для численных расчётов. В версии 2.5.4 входные данные проверяются до передачи этим алгоритмам: вместо зависания или недостоверного результата вызывающий код получает ошибку LinAlgError.

svd раскладывает матрицу на составляющие, которые применяются, например, при анализе данных и сжатии информации. lstsq ищет приближённое решение системы уравнений. Если в исходной таблице из-за предыдущих вычислений появились бесконечности, обе операции могли вести себя непредсказуемо. Теперь ошибка указывает на проблемные исходные значения, и программа может обработать её по собственным правилам.

Причину удалось проследить до конкретного поведения LAPACK: при обработке inf одна из процедур могла получить NaN — значение «не число» — и зациклиться. Проверка выполняется до вызова соответствующих процедур LAPACK. В описании исправления разработчики оценивают дополнительные затраты на эту проверку для SVD в пределах 1%.

Родственная функция numpy.linalg.cond, вычисляющая число обусловленности матрицы, тоже стала последовательнее работать с нечисловыми и бесконечными значениями. Для неё предусмотрен возврат inf или nan в соответствующих ситуациях. Таким образом, результат зависит от назначения функции: svd и lstsq сообщают об ошибке, а cond может возвращать специальное числовое значение.

Ошибка MSVC 19.51 искажала числа даже после успешной сборки NumPy

Отдельное исправление касается компилятора Microsoft Visual C++ версии 19.51, который использовался при сборке NumPy из исходного кода в среде Visual Studio 2026. Проблема была обнаружена ещё в августе: компилятор неправильно обрабатывал встроенные проверки isnan, isinf и isfinite для кода на C.

При включённой оптимизации /O2 сборка могла завершиться без сообщений об ошибке, но полученная библиотека вела себя неправильно. Например, np.arange(5) и np.linspace(0, 1, 3) выдавали ошибку расчёта длины, а вывод обычного массива чисел мог показывать inf вместо конечных значений. При отключённой оптимизации /Od возникала уже внутренняя ошибка самого компилятора.

В этом случае данные массива могли оставаться правильными, тогда как отдельные проверки чисел и их текстовое представление работали неверно. Для анализа ошибок это неприятный сценарий: установленная библиотека запускается, но часть результатов выглядит испорченной. В NumPy 2.5.4 добавлено обходное решение, которое учитывает дефект именно MSVC 19.51. Этот случай относится к компиляции из исходников с указанной версией инструментария; обычная установка готового пакета из PyPI представляет собой другой путь получения NumPy.

Замена строк и StringDType больше не дают неожиданных результатов

В функции np.strings.replace устранили ошибку обрезания строк замены. Раньше длина аргументов old и new могла ограничиваться размером элемента исходного массива. Например, при замене буквы a на XY в массиве со строковыми элементами длиной один символ получался результат X: вторая буква пропадала. Исправление позволяет учитывать реальную длину заменяющего текста.

Второе изменение связано со StringDType — типом данных NumPy для строк переменной длины. Его можно настроить так, чтобы отсутствующее значение обозначалось специальным маркером NaN. Эквивалентные описания такого типа раньше могли иметь разные хеши, если использовали разные объекты NaN.

Хеш — числовой идентификатор, по которому Python быстро ищет объекты в словарях и множествах. Когда два равных объекта дают разные хеши, операции поиска и удаления повторов могут вести себя неправильно. В версии 2.5.4 хеширование таких вариантов StringDType согласовано, включая сценарии восстановления объектов из сериализованных данных. Исправления также затрагивают обработку повторов функцией np.unique для строк с маркерами отсутствующих значений.

Маскированные массивы и накопительные вычисления получили дополнительные проверки

У MaskedArray есть значение fill_value, которым заполняют скрытые или отсутствующие элементы массива. После изменения типа данных унаследованное значение иногда оставалось в старом формате. Ошибка обнаруживалась позже, например при вызове .view(), либо появлялось предупреждение из-за числа, не помещающегося в новый целочисленный тип.

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

Ещё одна группа исправлений защищает ufunc.accumulate — внутренний механизм накопительных операций, к которым относится вычисление сумм с нарастающим итогом. Перед использованием выходного массива теперь проверяется соответствие его формы входным данным. Ранее неподходящая форма out могла привести к аварийному завершению программы; дополнительная правка касается чтения неинициализированной памяти при формировании сообщения об ошибке.

Разработчики внесли и изменения в аннотации типов NumPy, используемые редакторами кода и статическими анализаторами. По данным официальных release notes, это исправления и уточнения существующей системы типизации.

NumPy 2.5.4 поддерживает Python 3.12–3.15

NumPy 2.5.4 опубликован 10 октября 2026 года и распространяется через PyPI. Официально заявлена поддержка Python от 3.12 до 3.15 включительно. Версия 2.5.3 вышла 6 сентября и уже поддерживала тот же диапазон интерпретаторов, поэтому требования к версии Python в этом обновлении остались прежними.

Для серии 2.5.x сохраняется разделение между изменениями интерфейсов и точечными исправлениями. Ещё в NumPy 2.5.0 разработчики отказались от поддержки Python 3.11 и удалили numpy.distutils. Выпуск 2.5.4 сосредоточен на конкретных дефектах уже существующих функций, в том числе на случаях, когда программа зависала, завершалась аварийно или возвращала некорректный результат.

Статистику о количестве проектов, затронутых этими ошибками, разработчики не приводят. Документирован круг условий, при которых проявлялись сбои: бесконечности в задачах линейной алгебры, компиляция с MSVC 19.51, обработка строк и отдельные операции с массивами.

Источники

При использовании материалов сайта необходимо указывать ссылку на TGLand.ru. Если вы копируете фрагменты текста в интернете, прямая гиперссылка, доступная для индексации поисковыми системами, должна быть размещена в начале материала.

Вам также может понравиться