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 аргумент ключевого слова.