Примечания к выпуску SciPy 0.13.0#
SciPy 0.13.0 — результат 7 месяцев напряженной работы. Он содержит множество новых функций, многочисленные исправления ошибок, улучшенное покрытие тестами и лучшую документацию. В этом выпуске было несколько устареваний и изменений API, которые задокументированы ниже. Всем пользователям рекомендуется обновиться до этого выпуска, так как в нем большое количество исправлений ошибок и оптимизаций. Более того, наше внимание разработчиков теперь переключится на выпуски исправлений ошибок в ветке 0.13.x и на добавление новых функций в ветке master.
Для этого выпуска требуется Python 2.6, 2.7 или 3.1-3.3 и NumPy 1.5.1 или выше. Основные моменты этого выпуска:
поддержка расширенной индексации и булевых сравнений с разреженными матрицами
интерполяционные разложения и матричные функции в модуле linalg
два новых решателя доверительной области для безусловной минимизации
Новые возможности#
scipy.integrate улучшения#
N-мерное численное интегрирование#
Новая функция scipy.integrate.nquad, который предоставляет N-мерную функциональность интегрирования с более гибким интерфейсом, чем dblquad и
tplquad, был добавлен.
dopri* улучшения#
Промежуточные результаты из dopri семейство решателей ОДУ теперь может быть
доступно через solout функция обратного вызова.
scipy.linalg улучшения#
Интерполяционные разложения#
Scipy теперь включает новый модуль scipy.linalg.interpolative
содержащий подпрограммы для вычисления интерполятивных матричных разложений (ID). Эта возможность основана на пакете ID от P.G. Martinsson, V. Rokhlin, Y. Shkolnisky и M. Tygert, ранее адаптированном для Python в пакете PymatrixId от K.L. Ho.
Полярное разложение#
Новая функция scipy.linalg.polar, для вычисления полярного разложения
матрицы, был добавлен.
Функции BLAS уровня 3#
Функции BLAS symm, syrk, syr2k, hemm, herk и
her2k теперь обёрнуты в scipy.linalg.
Матричные функции#
Несколько алгоритмов матричных функций были реализованы или обновлены в соответствии с
подробными описаниями в недавних статьях Ника Хайэма и его соавторов.
К ним относятся матричный квадратный корень (sqrtm), матричный логарифм
(logm), матричная экспонента (expm) и её производная Фреше
(expm_frechet), и дробные степени матриц (fractional_matrix_power).
scipy.optimize улучшения#
Алгоритмы минимизации без ограничений в доверительной области#
The minimize функция получила два решателя с доверительной областью для безусловной минимизации: dogleg и trust-ncg.
scipy.sparse улучшения#
Булевы сравнения и разреженные матрицы#
Все типы разреженных матриц теперь поддерживают булевы данные и булевы операции. Две разреженные матрицы A и B можно сравнивать всеми ожидаемыми способами A < B, A >= B, A != B, давая схожие результаты с плотными массивами Numpy. Также поддерживаются сравнения с плотными матрицами и скалярами.
CSR и CSC расширенное индексирование#
Сжатые разреженные матрицы форматов строк и столбцов теперь поддерживают расширенное индексирование с булевыми матрицами, срезами и списками. Например, если A — разреженная матрица (CSC или CSR), можно выполнять такие операции:
>>> A[A > 0.5] = 1 # since Boolean sparse matrices work
>>> A[:2, :3] = 2
>>> A[[1,2], 2] = 3
scipy.sparse.linalg улучшения#
Новая функция onenormest предоставляет нижнюю границу 1-нормы линейного оператора и была реализована в соответствии с Хайэмом и Тиссёром (2000). Эта функция полезна не только для разреженных матриц, но также может использоваться для оценки нормы произведений или степеней плотных матриц без явного построения промежуточной матрицы.
Мультипликативное действие матричной экспоненты линейного оператора (expm_multiply) была реализована в соответствии с описанием в Al-Mohy и Higham (2011).
Абстрактные линейные операторы (scipy.sparse.linalg.LinearOperator) теперь можно
умножать, складывать друг с другом и возводить в степень, создавая новые линейные
операторы. Это упрощает построение составных линейных операций.
scipy.spatial улучшения#
Вершины ConvexHull теперь доступны через вершины атрибут, который обеспечивает правильную ориентацию в 2-D.
scipy.signal улучшения#
Косинусная оконная функция scipy.signal.cosine был добавлен.
scipy.special улучшения#
Новые функции scipy.special.xlogy и scipy.special.xlog1py были добавлены.
Эти функции могут упростить и ускорить код, который должен вычислять
x * log(y) и дают 0, когда x == 0.
scipy.io улучшения#
Считыватель неформатированных файлов Fortran#
Новый класс scipy.io.FortranFile облегчает чтение неформатированных последовательных файлов, записанных кодом на Fortran.
scipy.io.wavfile улучшения#
scipy.io.wavfile.write теперь принимает файловый буфер. Ранее принимались только имена файлов.
scipy.io.wavfile.read и scipy.io.wavfile.write теперь может обрабатывать WAV-файлы с плавающей точкой.
scipy.interpolate улучшения#
Производные и первообразные B-сплайнов#
scipy.interpolate.splder и scipy.interpolate.splantider функции
для вычисления B-сплайнов, представляющих производные и первообразные
B-сплайнов, были добавлены. Эти функции также доступны в
интерфейсе FITPACK на основе классов как UnivariateSpline.derivative и
UnivariateSpline.antiderivative.
scipy.stats улучшения#
Распределения теперь позволяют использовать ключевые параметры в дополнение к позиционным параметрам во всех методах.
Функция scipy.stats.power_divergence был добавлен для
статистики расхождения мощности Кресси-Рида и теста согласия.
В это семейство статистик входит "G-тест"
(https://en.wikipedia.org/wiki/G-test).
scipy.stats.mood теперь принимает многомерный ввод.
Была добавлена опция для scipy.stats.wilcoxon для поправки на непрерывность.
scipy.stats.chisquare теперь имеет ось аргумент.
scipy.stats.mstats.chisquare теперь имеет ось и ddof аргументы.
Устаревшие функции#
expm2 и expm3#
Функции матричной экспоненты scipy.linalg.expm2 и scipy.linalg.expm3
устарели. Всем пользователям следует использовать численно более устойчивые
scipy.linalg.expm функция вместо.
scipy.stats функции#
scipy.stats.oneway устарел; scipy.stats.f_oneway следует использовать
вместо этого.
scipy.stats.glm устарело. scipy.stats.ttest_ind является эквивалентной
функцией; более полнофункциональные реализации общей (и обобщённой) линейной модели
можно найти в statsmodels.
scipy.stats.cmedian устарел; numpy.median следует использовать вместо.
Обратно несовместимые изменения#
Присваивание LIL матрицы#
Присвоение значений матрицам LIL с двумя индексными массивами теперь работает аналогично присвоению в ndarrays:
>>> x = lil_matrix((3, 3))
>>> x[[0,1,2],[0,1,2]]=[0,1,2]
>>> x.todense()
matrix([[ 0., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 2.]])
вместо того чтобы давать результат:
>>> x.todense()
matrix([[ 0., 1., 2.],
[ 0., 1., 2.],
[ 0., 1., 2.]])
Пользователям, полагавшимся на предыдущее поведение, потребуется пересмотреть свой код.
Предыдущее поведение достигается с помощью x[numpy.ix_([0,1,2],[0,1,2])] = ....
Устаревший radon функция удалена#
The misc.radon функция, которая была устаревшей в scipy 0.11.0, была удалена. Пользователи могут найти более полнофункциональную radon функция в
scikit-image.
Удалены устаревшие ключевые слова xa и xb из stats.distributions#
Ключевые слова xa и xb, которые были устаревшими с версии 0.11.0, были
удалены из распределений в scipy.stats.
Изменения в читателях/писателях файлов MATLAB#
Основное изменение заключается в том, что одномерные массивы в numpy теперь становятся векторами-строками (форма 1, N)
при сохранении в файл формата MATLAB 5. Ранее одномерные массивы сохранялись как векторы-столбцы
(N, 1). Это сделано для гармонизации поведения записи форматов MATLAB 4 и 5,
и адаптации к умолчаниям numpy и MATLAB — например
np.atleast_2d возвращает одномерные массивы как векторы-строки.
Попытка сохранить массивы размерностью более 2 в формате MATLAB 4 теперь вызывает ошибку вместо молчаливого преобразования массива в 2D.
scipy.io.loadmat('afile') используется для поиска afile в пути системы Python (sys.path); теперь loadmat ищет только в текущем каталоге для относительного пути к файлу.
Прочие изменения#
Исправление безопасности: scipy.weave ранее использовало временные каталоги небезопасным образом при определенных обстоятельствах.
Cython теперь требуется для сборки невыпущенный версии scipy. C-файлы, сгенерированные из исходников Cython, больше не включены в git repo. Они по-прежнему поставляются в исходных релизах.
Кодовая база получила довольно большую очистку в соответствии с PEP8. A tox pep8
команда была добавлена; новый код должен проходить эту тестовую команду.
Scipy больше не может компилироваться с gfortran 4.1 (по крайней мере на RH5), вероятно, из-за того, что эта версия компилятора плохо поддерживает конструкции entry.