SciPy 0.18.0 Примечания к выпуску#
SciPy 0.18.0 — результат 6 месяцев напряженной работы. Он содержит множество новых функций, многочисленные исправления ошибок, улучшенное покрытие тестами и лучшую документацию. В этом выпуске было несколько устареваний и изменений API, которые задокументированы ниже. Всем пользователям рекомендуется обновиться до этого выпуска, так как в нем большое количество исправлений ошибок и оптимизаций. Кроме того, наше внимание в разработке теперь переключится на выпуски с исправлениями ошибок в ветке 0.19.x и на добавление новых функций в основной ветке.
Для этого выпуска требуется Python 2.7 или 3.4-3.5 и NumPy 1.7.1 или выше.
Основные особенности этого выпуска включают:
Новый решатель ОДУ для краевых задач, scipy.optimize.solve_bvp.
Новый класс, CubicSpline, для кубической сплайн-интерполяции данных.
N-мерные тензорные произведения полиномов,
scipy.interpolate.NdPPoly.Сферические диаграммы Вороного,
scipy.spatial.SphericalVoronoi.Поддержка дискретно-временных линейных систем,
scipy.signal.dlti.
Новые возможности#
scipy.integrate улучшения#
Решатель двухточечных краевых задач для систем ОДУ был реализован в scipy.integrate.solve_bvp. Решатель допускает несвязанные
граничные условия, неизвестные параметры и некоторые сингулярные члены. Он находит
C1-непрерывное решение с использованием алгоритма коллокации четвертого порядка.
scipy.interpolate улучшения#
Кубическая сплайн-интерполяция теперь доступна через scipy.interpolate.CubicSpline. Этот класс представляет кусочно-кубический полином, проходящий через заданные точки и C2-непрерывный. Он представлен в стандартном полиномиальном базисе на каждом сегменте.
Доступно представление n-мерных тензорных произведений кусочно-полиномиальных функций как scipy.interpolate.NdPPoly класс.
Классы кусочно-полиномиальных функций одной переменной, PPoly и Bpoly, теперь может быть
вычислен на периодических областях. Используйте extrapolate="periodic" ключевой аргумент для этого.
scipy.fftpack улучшения#
scipy.fftpack.next_fast_len функция вычисляет следующее «регулярное» число для
FFTPACK. Дополнение входных данных до этой длины может дать значительное повышение производительности для scipy.fftpack.fft.
scipy.signal улучшения#
Передискретизация с использованием полифазной фильтрации реализована в функции
scipy.signal.resample_poly. Этот метод повышает частоту дискретизации сигнала, применяет КИХ-фильтр нижних частот с нулевой фазой и понижает частоту дискретизации с использованием scipy.signal.upfirdn
(что также новое в 0.18.0). Этот метод может быть быстрее, чем фильтрация на основе FFT, предоставляемая scipy.signal.resample для некоторых сигналов.
scipy.signal.firls, который строит КИХ-фильтры с использованием минимизации ошибки методом наименьших квадратов, был добавлен.
scipy.signal.sosfiltfilt, который выполняет фильтрацию вперед-назад, как
scipy.signal.filtfilt но для секций второго порядка, был добавлен.
Дискретные линейные системы#
scipy.signal.dlti предоставляет реализацию дискретно-временных линейных систем. Соответственно, StateSpace, TransferFunction и ZerosPolesGain классы
научились новому ключевому слову, dt, который можно использовать для создания дискретно-временных
экземпляров соответствующего представления системы.
scipy.sparse улучшения#
Функции sum, max, mean, min, транспонирование, и reshape в
scipy.sparse были дополнены дополнительными аргументами и функциональностью для улучшения совместимости с аналогично определенными функциями в numpy.
Разреженные матрицы теперь имеют Возвращает указатель данных, приведенный к определенному объекту c-типов. Например, вызов метод, который подсчитывает количество
ненулевых элементов в матрице. В отличие от getnnz() и nnz свойство,
которое возвращает количество сохранённых записей (длину атрибута data),
этот метод подсчитывает фактическое количество ненулевых записей в data.
scipy.optimize улучшения#
Реализация минимизации по методу Нелдера-Мида, scipy.minimize(…, method="Nelder-Mead"), получил новый ключевой аргумент, initial_simplex, который может использоваться для указания начального симплекса для процесса оптимизации.
Улучшен выбор начального размера шага в минимизаторах CG и BFGS. Мы ожидаем, что это изменение улучшит численную устойчивость оптимизации в некоторых случаях. Подробности см. в pull request gh-5536.
Улучшена обработка бесконечных границ в оптимизации SLSQP. Ожидается, что это изменение улучшит численную стабильность оптимизации в некоторых случаях. Подробности см. в pull request gh-6024.
Большой набор тестов глобальной оптимизации был добавлен в
scipy/benchmarks/go_benchmark_functions. Подробности см. в pull request gh-4191.
Минимизация Нелдера-Мида и Пауэлла теперь будет устанавливать значения по умолчанию для максимального количества итераций или вычислений функции только если ни один лимит не задан вызывающим кодом. В некоторых случаях с медленно сходящейся функцией и только одним установленным лимитом, минимизация может продолжаться дольше, чем в предыдущих версиях, и поэтому с большей вероятностью достигнет сходимости. См. issue gh-5966.
scipy.stats улучшения#
Трапециевидное распределение реализовано как scipy.stats.trapz.
Скошенное нормальное распределение было реализовано как scipy.stats.skewnorm.
Распределение Берра типа XII было реализовано как scipy.stats.burr12.
Трёх- и четырёхпараметрические распределения каппа были реализованы как
scipy.stats.kappa3 и scipy.stats.kappa4, соответственно.
Новый scipy.stats.iqr функция вычисляет межквартильный размах распределения.
Случайные матрицы#
scipy.stats.special_ortho_group и scipy.stats.ortho_group предоставляют
генераторы случайных матриц в группах SO(N) и O(N) соответственно. Они
генерируют матрицы в распределении Хаара, единственном равномерном распределении на этих групповых многообразиях.
scipy.stats.random_correlation предоставляет генератор для случайных
корреляционных матриц с заданными собственными значениями.
scipy.linalg улучшения#
scipy.linalg.svd получил новый аргумент ключевого слова, lapack_driver. Доступные
драйверы: gesdd (по умолчанию) и gesvd.
scipy.linalg.lapack.ilaver возвращает версию библиотеки LAPACK, с которой связан SciPy.
scipy.spatial улучшения#
Булевы расстояния, scipy.spatial.pdistбыли ускорены. Улучшения варьируются в зависимости от функции и размера входных данных. Во многих случаях можно ожидать ускорения в 2–10 раз.
Новый класс scipy.spatial.SphericalVoronoi строит диаграммы Вороного на поверхности сферы. Подробности см. в pull request gh-5232.
scipy.cluster улучшения#
Новый алгоритм кластеризации, алгоритм цепочки ближайших соседей, был
реализован для scipy.cluster.hierarchy.linkage. В результате можно ожидать
значительного алгоритмического улучшения (\(O(N^2)\) вместо \(O(N^3)\))
для нескольких методов связывания.
scipy.special улучшения#
Новая функция scipy.special.loggamma вычисляет главную ветвь
логарифма гамма-функции. Для вещественного ввода, loggamma совместим с scipy.special.gammaln. Для комплексного ввода он имеет более согласованное поведение в комплексной плоскости и должен быть предпочтительнее gammaln.
Векторизованные формы сферических функций Бесселя были реализованы как
scipy.special.spherical_jn, scipy.special.spherical_kn,
scipy.special.spherical_in и scipy.special.spherical_yn.
Они рекомендуются для использования вместо sph_* функции, которые теперь устарели.
Несколько специальных функций были расширены на комплексную область и/или получили улучшения в области определения/стабильности. Это включает spence, digamma, log1p и несколько других.
Устаревшие функции#
Перекрёстные свойства lti системы устарели. Следующие свойства/сеттеры вызовут DeprecationWarning:
Имя - (доступ/установка вызывает предупреждение) - (установка вызывает предупреждение) * StateSpace - (число, den, усиление) - (zeros, полюса) * TransferFunction (A, B, C, D, усиление) - (zeros, полюса) * ZerosPolesGain (A, B, C, D, число, den) - ()
Сферические функции Бесселя, sph_in, sph_jn, sph_kn, sph_yn,
sph_jnyn и sph_inkn устарели в пользу
scipy.special.spherical_jn и spherical_kn, spherical_yn,
spherical_in.
Следующие функции в scipy.constants устарели: C2K, K2C,
C2F, F2C, F2K и K2F. Они заменены новой функцией
scipy.constants.convert_temperature который может выполнять все эти преобразования
плюс в/из температурной шкалы Ранкина.
Обратно несовместимые изменения#
scipy.optimize#
Критерий сходимости для optimize.bisect,
optimize.brentq, optimize.brenth, и optimize.ridder теперь
работает так же, как numpy.allclose.
scipy.ndimage#
Смещение в ndimage.interpolation.affine_transform
теперь последовательно добавляется после применения матрицы, независимо от того, задана ли матрица с использованием одномерного или двумерного массива.
scipy.stats#
stats.ks_2samp раньше возвращал бессмысленные значения, если входные данные не были вещественными или содержали NaN. Теперь для таких входных данных возникает исключение.
Некоторые устаревшие методы scipy.stats распределения были удалены:
est_loc_scale, vecfunc, veccdf и vec_generic_moment.
Устаревшие функции nanmean, nanstd и nanmedian были удалены
из scipy.stats. Эти функции были объявлены устаревшими в scipy 0.15.0 в пользу
их numpy эквиваленты.
Ошибка в rvs() метод распределений в scipy.stats исправлено. Когда аргументы для rvs() были даны, которые были сформированы для широковещания, во многих случаях возвращённые случайные выборки не были случайными. Простой пример проблемы: stats.norm.rvs(loc=np.zeros(10))Из-за ошибки этот вызов возвращал 10 одинаковых значений. Ошибка затрагивала только код, который полагался на broadcasting параметров shape, location и scale.
The rvs() метод также принимал некоторые аргументы, которые он не должен был принимать. Существует потенциальная проблема обратной совместимости в случаях, когда rvs()
принимала аргументы, которые фактически несовместимы с широковещанием. Примером является
stats.gamma.rvs([2, 5, 10, 15], size=(2,2))
Форма первого аргумента не совместима с запрошенным размером,
но функция все равно вернула массив с формой (2, 2). В scipy 0.18
этот вызов генерирует ValueError.
scipy.io#
scipy.io.netcdf маскирование теперь отдает приоритет _FillValue атрибут
над missing_value атрибут, если заданы оба. Также данные считаются пропущенными только если они точно соответствуют одному из этих атрибутов: значения, которые отличаются из-за округления от _FillValue или missing_value больше не считаются пропущенными значениями.
scipy.interpolate#
scipy.interpolate.PiecewisePolynomial класс был удалён. Он был
устаревшим в scipy 0.14.0, и scipy.interpolate.BPoly.from_derivatives служит
как прямая замена.
Прочие изменения#
Scipy теперь использует setuptools для своих сборок вместо простого distutils. Это исправляет использование install_requires='scipy' в setup.py файлах
проектов, зависящих от Scipy (подробности см. в issue Numpy gh-6551). Это
потенциально влияет на поведение методов сборки/установки самого Scipy.
Пожалуйста, сообщайте о любом неожиданном поведении в трекере issue Scipy.
PR #6240
изменяет интерпретацию maxfun опция в L-BFGS-B основанные на подпрограммах
в scipy.optimize модуль.
An L-BFGS-B поиск состоит из нескольких итераций,
причём каждая итерация состоит из одного или нескольких вычислений функции.
В то время как старая стратегия поиска завершалась сразу после достижения maxfun
вычислениям функции, новая стратегия позволяет завершить текущую итерацию
несмотря на достижение maxfun.
Включенная копия Qhull в scipy.spatial подпакет был обновлен до
версии 2015.2.
Встроенная копия ARPACK в scipy.sparse.linalg подпакет был обновлён до arpack-ng 3.3.0.
Встроенная копия SuperLU в scipy.sparse подпакет был обновлен
до версии 5.1.1.