Примечания к выпуску SciPy 1.2.0#
SciPy 1.2.0 — результат шести месяцев напряжённой работы. Он содержит множество новых функций, исправления ошибок, улучшенное покрытие тестами и более качественную документацию. В этом выпуске произошло несколько устареваний и изменений API, которые описаны ниже. Всем пользователям рекомендуется обновиться до этой версии, так как в ней содержится большое количество исправлений ошибок и оптимизаций. Перед обновлением мы рекомендуем пользователям проверить, что их собственный код не использует устаревшую функциональность SciPy (для этого запустите свой код с python -Wd и проверка на DeprecationWarning s).
Наше внимание в разработке теперь переключится на выпуски с исправлением ошибок в ветке 1.2.x и на добавление новых функций в ветку master.
Для этого релиза требуется Python 2.7 или 3.4+ и NumPy 1.8.2 или выше.
Примечание
Это будет последний выпуск SciPy, поддерживающий Python 2.7. Следовательно, серия 1.2.x будет выпуском долгосрочной поддержки (LTS); мы будем переносить исправления ошибок до 1 января 2020 года.
Для работы на PyPy требуются PyPy3 6.0+ и NumPy 1.15.0.
Основные моменты этого выпуска#
Улучшения поиска корней в 1-D с новым решателем,
toms748, и новый унифицированный интерфейс,root_scalarновый
dual_annealingметод оптимизации, сочетающий стохастический и локальный детерминированный поискновый алгоритм оптимизации,
shgo(симплициальная гомологическая глобальная оптимизация), для задач оптимизации без производныхновая категория преобразований на основе кватернионов доступна в
scipy.spatial.transform
Новые возможности#
scipy.ndimage улучшения#
Правильные расчёты коэффициентов сплайна были добавлены для mirror,
wrap, и reflect режимы scipy.ndimage.rotate.
scipy.fftpack улучшения#
Ортонормировка DCT-IV, DST-IV, DCT-I и DST-I теперь поддерживается в
scipy.fftpack.
scipy.interpolate улучшения#
scipy.interpolate.pade теперь принимает новый аргумент для порядка
числителя.
scipy.cluster улучшения#
scipy.cluster.vq.kmeans2 получил новый метод инициализации, kmeans++.
scipy.special улучшения#
Функция softmax был добавлен в scipy.special.
scipy.optimize улучшения#
Одномерным нелинейным решателям предоставлен унифицированный интерфейс
scipy.optimize.root_scalar, аналогично scipy.optimize.root интерфейс для многомерных решателей. scipy.optimize.root_scalar(f, bracket=[a ,b],
method="brenth") эквивалентно scipy.optimize.brenth(f, a ,b). Если нет
method указан, подходящий будет выбран на основе
скобки и количества доступных производных.
Так называемый Алгоритм 748 Alefeld, Potra и Shi для нахождения корней в ограничивающем интервале был добавлен как scipy.optimize.toms748. Это обеспечивает гарантированную сходимость к корню со скоростью сходимости на одно вычисление функции примерно 1,65 (для достаточно хорошо ведущих себя функций).
differential_evolution теперь имеет updating и workers ключевые слова.
Первый выбирает между непрерывным обновлением лучшего вектора решения (по умолчанию) или один раз за поколение. Непрерывное обновление может привести к более быстрой сходимости. workers ключевое слово принимает int или вызываемый объект, подобный отображению,
и распараллеливает решатель (с побочным эффектом обновления один раз за
поколение). Предоставление int оценивает пробные решения в N параллельных частях. Предоставление вызываемого объекта, подобного map, позволяет использовать другие подходы к параллелизации (такие как mpi4py, или joblib) для использования.
dual_annealing (и shgo ниже) — это новый мощный алгоритм глобальной оптимизации общего назначения. dual_annealing использует два процесса
отжига для ускорения сходимости к глобальному минимуму целевой
математической функции. Первый процесс отжига управляет
стохастической цепью Маркова, а второй — детерминированной минимизацией. Таким образом, двойной отжиг — это гибридный метод, который
эффективно использует преимущества стохастического и локального детерминированного поиска.
shgo (симплициальная гомологическая глобальная оптимизация) — это аналогичный алгоритм,
подходящий для решения задач чёрного ящика и оптимизации без производных (DFO).
Алгоритм обычно сходится к глобальному решению за конечное время.
Сходимость сохраняется для нелинейных ограничений-неравенств и
ограничений-равенств. Помимо возврата глобального минимума,
алгоритм также возвращает любые другие глобальные и локальные минимумы, найденные после каждой
итерации. Это делает его полезным для исследования решений в области.
scipy.optimize.newton теперь может принимать скаляр или массив.
MINPACK использование теперь потокобезопасно, так что MINPACK + обратные вызовы могут
использоваться в нескольких потоках.
scipy.signal улучшения#
Функции проектирования цифровых фильтров теперь включают параметр для указания частоты
дискретизации. Ранее цифровые фильтры могли быть заданы только с использованием нормированной
частоты, но разные функции использовали разные шкалы (например, от 0 до 1 для
butter против 0 до π для freqz), что приводит к ошибкам и путанице. С fs параметр, обычные частоты теперь можно вводить непосредственно в функции, а нормализация обрабатывается внутренне.
find_peaks и связанные функции больше не вызывают исключение, если
свойства пика имеют неожиданные значения (например, значимость 0).
PeakPropertyWarning предоставляется вместо этого.
Новый аргумент ключевого слова plateau_size был добавлен в find_peaks.
plateau_size может использоваться для выбора пиков на основе длины
плоской вершины пика.
welch() и csd() методы в scipy.signal теперь поддерживают расчет средней медианной СПМ, используя average='mean' ключевое слово.
scipy.sparse улучшения#
The scipy.sparse.bsr_matrix.tocsr метод теперь реализован напрямую вместо преобразования через формат COO, и scipy.sparse.bsr_matrix.tocsc метод
теперь также направляется через преобразование CSR вместо COO. Эффективность обоих
преобразований теперь улучшена.
Проблема, когда решатели SuperLU или UMFPACK аварийно завершались
на матрицах с неканоническим форматом в scipy.sparse.linalg была исправлена. Обёртка решателя
канонизирует матрицу при необходимости перед вызовом
решателя SuperLU или UMFPACK.
The largest опция scipy.sparse.linalg.lobpcg() был исправлен для корректного (и ожидаемого) поведения. Порядок собственных значений был сделан согласованным с решателем ARPACK (eigs()), т.е. по возрастанию для
наименьших собственных значений и по убыванию для наибольших собственных значений.
The scipy.sparse.random функция теперь быстрее и также поддерживает целочисленные и комплексные значения путем передачи соответствующего значения в dtype аргумент.
scipy.spatial улучшения#
Функция scipy.spatial.distance.jaccard был изменён для возврата 0 вместо np.nan при сравнении двух полностью нулевых векторов.
Добавлена поддержка расстояния Йенсена-Шеннона, квадратного корня из дивергенции, под scipy.spatial.distance.jensenshannon.
В функцию было добавлено необязательное ключевое слово scipy.spatial.cKDTree.query_ball_point() сортировать или не сортировать возвращённые индексы. Несортировка индексов может ускорить вызовы.
Новая категория преобразований на основе кватернионов доступна в
scipy.spatial.transform, включая сферическую линейную интерполяцию
вращений (Slerp), преобразования в кватернионы и из них, углы Эйлера,
и общие возможности вращения и инверсии
(spatial.transform.Rotation), и равномерная случайная выборка 3D
вращений (spatial.transform.Rotation.random).
scipy.stats улучшения#
Преобразование Йео-Джонсона теперь поддерживается (yeojohnson,
yeojohnson_llf, yeojohnson_normmax, yeojohnson_normplot). В отличие
от преобразования Бокса-Кокса, преобразование Йео-Джонсона может принимать отрицательные
значения.
Добавлен общий метод для выборки случайных величин на основе только плотности,
в новой функции rvs_ratio_uniforms.
Распределение Юла-Саймона (yulesimon) был добавлен – это новое
дискретное распределение вероятностей.
stats и mstats теперь имеют доступ к новому методу регрессии,
siegelslopes, алгоритм робастной линейной регрессии
scipy.stats.gaussian_kde теперь имеет возможность работать со взвешенными выборками,
и должна иметь умеренное улучшение производительности
Оценка параметров устойчивого распределения Леви, PDF и CDF теперь поддерживаются
для scipy.stats.levy_stable.
Тест Бруннера-Мунцеля теперь доступен как brunnermunzel в stats
и mstats.
scipy.linalg улучшения#
scipy.linalg.lapack теперь предоставляет доступ к подпрограммам LAPACK, использующим упаковку Rectangular Full Packed (RFP) для верхних треугольных, нижних треугольных, симметричных или эрмитовых матриц; также теперь доступны подпрограммы разложения RZ для верхних трапециевидных широких матриц.
Устаревшие функции#
Функции hyp2f0, hyp1f2 и hyp3f0 в scipy.special устарели.
Обратно несовместимые изменения#
Теперь требуется версия LAPACK 3.4.0 или выше. Сборка с Apple Accelerate больше не поддерживается.
Функция scipy.linalg.subspace_angles(A, B) теперь даёт правильные
результаты для всех углов. До этого функция возвращала
правильные значения только для углов, больших π/4.
Поддержка системы сборки Bento удалена. Bento не поддерживалась несколько лет и не имела хорошей поддержки Python 3 или колес, поэтому пришло время удалить её.
Требуемая сигнатура scipy.optimize.lingprog method=simplex
функция обратного вызова изменилась. Перед началом итераций симплекс-решатель
сначала преобразует задачу в стандартную форму, которая, вообще говоря,
не имеет тех же переменных или ограничений,
что и задача, определённая пользователем. Ранее симплекс-решатель передавал
заданную пользователем функцию обратного вызова несколько отдельных аргументов, таких как
текущий вектор решения xk, соответствующие этой стандартной задаче.
К сожалению, связь между стандартной задачей и
задачей, определённой пользователем, не была задокументирована, что ограничивает полезность
информации, передаваемой в функцию обратного вызова.
В дополнение к многочисленным исправлениям ошибок, симплекс-решатель теперь передает
пользовательскую функцию обратного вызова одну OptimizeResult объект, содержащий
информацию, которая напрямую соответствует пользовательской задаче. В будущих
релизах этот OptimizeResult объект может быть расширен для включения дополнительной информации, такой как переменные, соответствующие задаче в стандартной форме, и информация о связи между стандартной формой и пользовательскими задачами.
Реализация scipy.sparse.random изменился, и это влияет на
числовые значения, возвращаемые как для sparse.random и sparse.rand для
некоторых форм матриц и заданного начального значения.
scipy.optimize.newton больше не будет использовать метод Халлея в случаях, когда он
негативно влияет на сходимость.