SciPy 1.3.0 Примечания к выпуску#
SciPy 1.3.0 — результат 5 месяцев напряжённой работы. Он содержит множество новых функций, исправлений ошибок, улучшенное покрытие тестами и документацию. В этом выпуске были некоторые изменения API, которые описаны ниже. Всем пользователям рекомендуется обновиться до этого выпуска, так как в нём большое количество исправлений ошибок и оптимизаций. Перед обновлением мы рекомендуем пользователям проверить, что их собственный код не использует устаревшую функциональность SciPy (для этого запустите код с python -Wd и проверка на DeprecationWarning s).
Наше внимание к разработке теперь переключится на выпуски исправлений ошибок в ветке 1.3.x и на добавление новых функций в основную ветку.
Для этого релиза требуется Python 3.5+ и NumPy 1.13.3 или выше.
Для работы на PyPy требуются PyPy3 6.0+ и NumPy 1.15.0.
Основные моменты этого выпуска#
Три новых
statsфункции, переписанныеpearsonr, и точное вычисление двухвыборочного критерия Колмогорова-Смирнова.Новый Cython API для ограниченных поиска корней скалярных функций в
scipy.optimize.Существенный
CSRиCSCулучшения производительности индексации разреженных матриц.Добавлена поддержка интерполяции вращений с непрерывной угловой скоростью и ускорением в
RotationSpline.
Новые возможности#
scipy.interpolate улучшения#
Новый класс CubicHermiteSpline представлен. Это кусочно-кубический
интерполятор, который совпадает с наблюдаемыми значениями и первыми производными. Существующие
кубические интерполяторы CubicSpline, PchipInterpolator и
Akima1DInterpolator были сделаны подклассами CubicHermiteSpline.
scipy.io улучшения#
Для формата файла атрибутов-отношений (ARFF) scipy.io.arff.loadarff
теперь поддерживает реляционные атрибуты.
scipy.io.mmread теперь может анализировать файлы формата Matrix Market с пустыми строками.
scipy.linalg улучшения#
Добавлены обёртки для ?syconv подпрограммы, которые преобразуют симметричную матрицу, заданную треугольным матричным разложением, в две матрицы и наоборот.
scipy.linalg.clarkson_woodruff_transform теперь использует алгоритм, который использует
разреженность. Это может обеспечить ускорение на 60-90 процентов для плотных входных матриц.
По-настоящему разреженные входные матрицы также должны выиграть от улучшенного алгоритма эскиза,
который теперь корректно выполняется за O(nnz(A)) time.
Добавлены новые функции для вычисления симметричных матриц Фидлера и
матриц-компаньонов Фидлера, названные scipy.linalg.fiedler и
scipy.linalg.fiedler_companion, соответственно. Они могут использоваться
для нахождения корней.
scipy.ndimage улучшения#
Производительность гауссовского фильтра может улучшиться на порядок величины в некоторых случаях благодаря устранению зависимости от np.polynomial. Это может повлиять на scipy.ndimage.gaussian_filter например.
scipy.optimize улучшения#
The scipy.optimize.brute минимизатор получил новый ключевой аргумент workers, который можно использовать для распараллеливания вычислений.
Cython API для ограниченных методов поиска корней скалярных функций в scipy.optimize
доступен в новом модуле scipy.optimize.cython_optimize через cimport.
Этот API может использоваться с nogil и prange для циклического
перебора массива аргументов функции, чтобы решить массив корней
быстрее, чем на чистом Python.
'interior-point' теперь является методом по умолчанию для linprog, и
'interior-point' теперь использует SuiteSparse для разреженных задач, когда требуемые scikits (scikit-umfpack и scikit-sparse) доступны. На тестовых задачах (gh-10026) типичное сокращение времени выполнения в 2-3 раза. Также, новый method='revised simplex' была добавлена.
Она не такая быстрая или надёжная, как method='interior-point', но это более быстрая,
более надежная и столь же точная замена для устаревшего
method='simplex'.
differential_evolution теперь может использовать Bounds класс для указания границ оптимизируемого аргумента функции.
scipy.optimize.dual_annealing улучшения производительности, связанные с
векторизацией некоторого внутреннего кода.
scipy.signal улучшения#
Теперь поддерживаются два дополнительных метода дискретизации
scipy.signal.cont2discrete: impulse и foh.
scipy.signal.firls теперь использует более быстрые решатели.
scipy.signal.detrend теперь имеет меньший физический объем памяти в некоторых
случаях, что может быть использовано с помощью нового overwrite_data аргумент ключевого слова.
scipy.signal.firwin pass_zero аргумент теперь принимает новые строковые значения,
позволяющие указать желаемый тип фильтра: 'bandpass',
'lowpass', 'highpass', и 'bandstop'.
scipy.signal.sosfilt может иметь улучшенную производительность из-за меньшего удержания глобальной блокировки интерпретатора (GIL) в алгоритме.
scipy.sparse улучшения#
Было добавлено новое ключевое слово в csgraph.dijsktra который
позволяет пользователям запрашивать кратчайший путь к ЛЮБОМУ из переданных индексов,
в отличие от кратчайшего пути к КАЖДОМУ переданному индексу.
scipy.sparse.linalg.lsmr производительность улучшена примерно на 10 процентов
для больших задач.
Улучшена производительность и уменьшен физический объём памяти алгоритма, используемого scipy.sparse.linalg.lobpcg.
CSR и CSC Производительность нестандартного индексирования разреженных матриц была
существенно улучшена.
scipy.spatial улучшения#
scipy.spatial.ConvexHull теперь имеет good атрибут, который можно использовать
вместе с QGn Параметры Qhull для определения, какие внешние грани выпуклой оболочки видны из внешней точки запроса.
scipy.spatial.cKDTree.query_ball_point был модернизирован для использования некоторых новых
возможностей Cython, включая обработку GIL и преобразование исключений. Проблема с return_sorted=True и скалярных запросов была исправлена, и добавлен новый режим с именем
return_length был добавлен. return_length вычисляет только длину
возвращаемого списка индексов вместо выделения массива каждый раз.
scipy.spatial.transform.RotationSpline был добавлен для включения интерполяции
вращений с непрерывными угловыми скоростями и ускорениями.
scipy.stats улучшения#
Добавлена новая функция для вычисления статистики критерия Эппса-Синглтона,
scipy.stats.epps_singleton_2samp, который может быть применен к непрерывным и дискретным распределениям.
Новые функции scipy.stats.median_absolute_deviation и scipy.stats.gstd
(геометрическое стандартное отклонение) были добавлены. scipy.stats.combine_pvalues
метод теперь поддерживает pearson, tippett и mudholkar_george pvalue
методы комбинирования.
The scipy.stats.ortho_group и scipy.stats.special_ortho_group
rvs(dim) алгоритмы функций были обновлены с O(dim^4)
реализация в O(dim^3) что даёт значительное ускорение для dim>100.
Переписывание scipy.stats.pearsonr использовать более надежный алгоритм, предоставлять значимые исключения и предупреждения для потенциально проблемных входных данных и исправлять как минимум пять отдельных зарегистрированных проблем в исходной реализации.
Улучшена точность hypergeom.logcdf и hypergeom.logsf.
Добавлено точное вычисление для двухвыборочного критерия Колмогорова-Смирнова (KS), заменяющее ранее приближенное вычисление для двустороннего теста stats.ks_2samp. Также добавлен односторонний двухвыборочный KS-тест и ключевое слово alternative to
stats.ks_2samp.
Обратно несовместимые изменения#
scipy.interpolate изменения#
Функции из scipy.interpolate (spleval, spline, splmake,
и spltopp) и функции из scipy.misc (bytescale,
fromimage, imfilter, imread, imresize, imrotate,
imsave, imshow, toimage) были удалены. Первый набор был устаревшим с версии v0.19.0, а второй — с версии v1.0.0. Аналогично, псевдонимы из scipy.misc (comb, factorial,
factorial2, factorialk, logsumexp, pade, info, source,
who), которые были устаревшими с версии v1.0.0, удалены.
Документация SciPy для
v1.1.0
может использоваться для отслеживания новых мест импорта перемещенных функций.
scipy.linalg изменения#
Для pinv, pinv2, и pinvh, значения по умолчанию для порогов изменены
для согласованности (см. документацию для фактических значений).
scipy.optimize изменения#
Метод по умолчанию для linprog теперь 'interior-point'. Робастность и скорость метода достигаются ценой: решения могут не быть точными до машинной точности или соответствовать вершине многогранника, определенного ограничениями. Чтобы вернуться к исходному симплекс-методу, включите аргумент method='simplex'.
scipy.stats изменения#
Ранее, ks_2samp(data1, data2) будет выполнять двусторонний тест и возвращать
приближенное p-значение. Новая сигнатура, ks_2samp(data1, data2,
alternative="two-sided", method="auto"), по-прежнему выполняет двусторонний тест по умолчанию, но возвращает точное p-значение для малых выборок и приближенное значение для больших выборок. method="asymp" будет эквивалентно
старой версии, но auto является лучшим выбором.
Прочие изменения#
Наш учебник был расширен новым разделом о глобальных оптимизаторах.
Была проведена переработка stats.distributions учебные пособия.
scipy.optimize теперь правильно устанавливает флаг сходимости результата в
CONVERR, ошибка сходимости для ограниченных методов поиска корней скалярных функций, если превышено максимальное количество итераций, disp ложно, и
full_output истинно.
scipy.optimize.curve_fit больше не завершается ошибкой, если xdata и ydata типы данных различаются; теперь они автоматически приводятся к float64.
scipy.ndimage функции, включая binary_erosion, binary_closing, и
binary_dilation теперь требуют целочисленное значение для количества итераций,
что устраняет ряд сообщённых проблем.
Исправлена нормальная аппроксимация в случае zero_method == "pratt" в
scipy.stats.wilcoxon.
Исправления некорректных вероятностей, проблем с трансляцией и потокобезопасностью, связанные с установкой переменных-членов внутри статистических распределений _argcheck().
scipy.optimize.newton теперь корректно вызывает RuntimeError в следующих случаях: когда используются аргументы по умолчанию
и если получена производная нулевого значения (что является особым случаем неудачи сходимости).
Теперь доступен проект дорожной карты инструментария, описывающий план совместимости, включая версии Python, стандарты C и версии NumPy.