SciPy 0.11.0 Примечания к выпуску#

SciPy 0.11.0 — это кульминация 8 месяцев упорной работы. Он содержит множество новых функций, многочисленные исправления ошибок, улучшенное покрытие тестами и лучшую документацию. Основные моменты этого выпуска:

  • Добавлен новый модуль, который предоставляет ряд общих алгоритмов для разреженных графов.

  • Добавлены новые унифицированные интерфейсы к существующим функциям оптимизации и поиска корней.

Всем пользователям рекомендуется обновиться до этого выпуска, так как он содержит большое количество исправлений ошибок и оптимизаций. Наше внимание разработчиков теперь переключится на выпуски исправлений ошибок в ветке 0.11.x и на добавление новых функций в ветке master.

Для этого выпуска требуется Python 2.4-2.7 или 3.1-3.2 и NumPy 1.5.1 или выше.

Новые возможности#

Подмодуль разреженных графов#

Новый подмодуль scipy.sparse.csgraph реализует ряд эффективных алгоритмов для графов, хранящихся в виде разреженных матриц смежности. Доступные процедуры:

  • connected_components - определить связные компоненты графа

  • laplacian - вычисление лапласиана графа

  • shortest_path - вычислять кратчайший путь между точками на положительном графе

  • dijkstra - используйте алгоритм Дейкстры для кратчайшего пути

  • floyd_warshall - использовать алгоритм Флойда-Уоршелла для кратчайшего пути

  • breadth_first_order - вычислить порядок узлов в ширину

  • depth_first_order - вычислить порядок узлов в глубину

  • breadth_first_tree - построить дерево поиска в ширину из заданного узла

  • depth_first_tree - построить дерево в глубину из заданного узла

  • minimum_spanning_tree - построить минимальное остовное дерево графа

scipy.optimize улучшения#

Модуль optimize получил много внимания в этом выпуске. В дополнение к добавленным тестам, улучшениям документации, исправлениям ошибок и очистке кода, были сделаны следующие улучшения:

  • Добавлен унифицированный интерфейс к минимизаторам функций одной и многих переменных.

  • Добавлен унифицированный интерфейс к алгоритмам поиска корней для многомерных функций.

  • Алгоритм L-BFGS-B обновлён до версии 3.0.

Унифицированные интерфейсы к минимизаторам#

Две новые функции scipy.optimize.minimize и scipy.optimize.minimize_scalar были добавлены для предоставления общего интерфейса к минимизаторам многомерных и одномерных функций соответственно. Для многомерных функций, scipy.optimize.minimize предоставляет интерфейс к методам безусловной оптимизации (fmin, fmin_powell, fmin_cg, fmin_ncg, fmin_bfgs и отжиг) или ограниченной оптимизации (fmin_l_bfgs_b, fmin_tnc, fmin_cobyla и fmin_slsqp). Для одномерных функций, scipy.optimize.minimize_scalar предоставляет интерфейс к методам для неограниченной и ограниченной оптимизации (brent, golden, fminbound). Это упрощает сравнение и переключение между решателями.

Унифицированный интерфейс для алгоритмов нахождения корней#

Новая функция scipy.optimize.root предоставляет общий интерфейс к алгоритмам поиска корней для многомерных функций, встраивая fsolve, leastsq и nonlin солверы.

scipy.linalg улучшения#

Новые решатели матричных уравнений#

Решатели уравнения Сильвестра (scipy.linalg.solve_sylvester, дискретные и непрерывные уравнения Ляпунова (scipy.linalg.solve_lyapunov, scipy.linalg.solve_discrete_lyapunov) и дискретные и непрерывные алгебраические уравнения Риккати (scipy.linalg.solve_continuous_are, scipy.linalg.solve_discrete_are) были добавлены в scipy.linalg. Эти решатели часто используются в области линейной теории управления.

QZ и QR разложения#

Теперь можно вычислить QZ-разложение, или обобщенное разложение Шура, используя scipy.linalg.qz. Эта функция оборачивает LAPACK-подпрограммы sgges, dgges, cgges и zgges.

Функция scipy.linalg.qr_multiply, который позволяет эффективно вычислять матричное произведение Q (из QR-разложения) и вектора, был добавлен.

матрицы Паскаля#

Функция для создания матриц Паскаля, scipy.linalg.pascal, был добавлен.

Построение и операции с разреженными матрицами#

Две новые функции, scipy.sparse.diags и scipy.sparse.block_diag, были добавлены для легкого построения диагональных и блочно-диагональных разреженных матриц соответственно.

scipy.sparse.csc_matrix и csr_matrix теперь поддерживают операции sin, tan, arcsin, arctan, sinh, tanh, arcsinh, arctanh, rint, sign, expm1, log1p, deg2rad, rad2deg, floor, ceil и trunc. Ранее эти операции приходилось выполнять, работая с data атрибут.

Итеративный решатель LSMR#

LSMR, итеративный метод решения (разреженных) линейных и линейных систем наименьших квадратов, был добавлен как scipy.sparse.linalg.lsmr.

Дискретное синус-преобразование#

Привязки для функций дискретного синус-преобразования были добавлены в scipy.fftpack.

scipy.interpolate улучшения#

Для интерполяции в сферических координатах, три класса scipy.interpolate.SmoothSphereBivariateSpline, scipy.interpolate.LSQSphereBivariateSpline, и scipy.interpolate.RectSphereBivariateSpline были добавлены.

Статистика по бинам (scipy.stats)#

Модуль stats получил функции для вычисления статистики по бинам, которые являются обобщением гистограмм в 1-D, 2-D и многомерных измерениях: scipy.stats.binned_statistic, scipy.stats.binned_statistic_2d и scipy.stats.binned_statistic_dd.

Устаревшие функции#

scipy.sparse.cs_graph_components был включен в подмодуль разреженного графа и переименован в scipy.sparse.csgraph.connected_components. Вызов предыдущей процедуры приведет к предупреждению об устаревании.

scipy.misc.radon был устаревшим. Более полная реализация преобразования Радона может быть найдена в scikits-image.

scipy.io.save_as_module был устаревшим. Лучший способ сохранения нескольких массивов Numpy — это numpy.savez функция.

The xa и xb параметры для всех распределений в scipy.stats.distributions : TST: Сделать

Обратно несовместимые изменения#

Удаление scipy.maxentropy#

The scipy.maxentropy модуль, который был объявлен устаревшим в выпуске 0.10.0, был удален. Логистическая регрессия в scikits.learn является хорошей и современной альтернативой для этой функциональности.

Незначительное изменение в поведении splev#

Функция оценки сплайна теперь ведёт себя аналогично interp1d для массивов размера 1. Предыдущее поведение:

>>> from scipy.interpolate import splev, splrep, interp1d
>>> x = [1,2,3,4,5]
>>> y = [4,5,6,7,8]
>>> tck = splrep(x, y)
>>> splev([1], tck)
4.
>>> splev(1, tck)
4.

Исправленное поведение:

>>> splev([1], tck)
array([ 4.])
>>> splev(1, tck)
array(4.)

Это также влияет на UnivariateSpline классы.

Поведение scipy.integrate.complex_ode#

Поведение y атрибут complex_ode изменяется. Ранее оно выражало комплекснозначное решение в виде:

z = ode.y[::2] + 1j * ode.y[1::2]

Теперь это непосредственно комплекснозначное решение:

z = ode.y

Незначительное изменение в поведении T-тестов#

T-тесты scipy.stats.ttest_ind, scipy.stats.ttest_rel и scipy.stats.ttest_1samp были изменены так, что 0 / 0 теперь возвращает NaN вместо 1.

Прочие изменения#

Исходные коды SuperLU в scipy.sparse.linalg были обновлены до версии 4.3 из исходного репозитория.

Функция scipy.signal.bode, который вычисляет амплитуду и фазовые данные для непрерывной системы, был добавлен.

Двухвыборочный T-тест scipy.stats.ttest_ind получил возможность сравнивать выборки с неравными дисперсиями, т.е. t-критерий Уэлча.

scipy.misc.logsumexp теперь принимает необязательный axis аргумент ключевого слова.

Авторы#

Этот выпуск содержит работу следующих людей (внесших как минимум один патч в этот выпуск, имена в алфавитном порядке):

  • Jeff Armstrong

  • Чад Бейкер

  • Brandon Beacher +

  • behrisch +

  • borishim +

  • Мэтью Бретт

  • Lars Buitinck

  • Луис Педро Коэльо +

  • Johann Cohen-Tanugi

  • David Cournapeau

  • dougal +

  • Али Эбрахим +

  • endolith +

  • Bjørn Forsman +

  • Роберт Гантнер +

  • Sebastian Gassner +

  • Кристоф Голке

  • Ralf Gommers

  • Yaroslav Halchenko

  • Чарльз Харрис

  • Джонатан Хелмус +

  • Андреас Хилболл +

  • Marc Honnorat +

  • Джонатан Хант +

  • Maxim Ivanov +

  • Thouis (Ray) Jones

  • Кристофер Кустер +

  • Josh Lawrence +

  • Denis Laxalde +

  • Трэвис Олифант

  • Joonas Paalasmaa +

  • Fabian Pedregosa

  • Josef Perktold

  • Gavin Price +

  • Джим Рэдфорд +

  • Andrew Schein +

  • Skipper Seabold

  • Jacob Silterra +

  • Scott Sinclair

  • Alexis Tabary +

  • Martin Teichmann

  • Matt Terry +

  • Nicky van Foreest +

  • Jacob Vanderplas

  • Патрик Варилли +

  • Pauli Virtanen

  • Nils Wagner +

  • Даррил Уолли +

  • Stefan van der Walt

  • Liming Wang +

  • David Warde-Farley +

  • Warren Weckesser

  • Sebastian Werk +

  • Mike Wimmer +

  • Тони С. Ю +

Всего 55 человек внесли вклад в этот релиз. Люди со знаком «+» после имени внесли патч впервые.