Примечания к выпуску SciPy 0.19.0#
SciPy 0.19.0 - это кульминация 7 месяцев упорной работы. Он содержит много новых функций, многочисленные исправления ошибок, улучшенное покрытие тестами и лучшую документацию. В этом выпуске было несколько устареваний и изменений API, которые задокументированы ниже. Все пользователи рекомендуется обновиться до этого выпуска, так как есть большое количество исправлений ошибок и оптимизаций. Более того, наше внимание к разработке теперь переключится на выпуски исправлений ошибок в ветке 0.19.x и на добавление новых функций в основной ветке.
Для этого выпуска требуется Python 2.7 или 3.4-3.6 и NumPy 1.8.2 или выше.
Основные особенности этого выпуска включают:
Унифицированный слой интерфейса внешних функций,
scipy.LowLevelCallable.Cython API для скалярных типизированных версий универсальных функций из
scipy.specialмодуль, через cimport scipy.special.cython_special.
Новые возможности#
Улучшения интерфейса внешних функций#
scipy.LowLevelCallable предоставляет новый унифицированный интерфейс для обёртки низкоуровневых скомпилированных функций обратного вызова в пространстве Python. Поддерживает импортированные через Cython функции "api", указатели на функции ctypes, указатели на функции CFFI, PyCapsules, функции с JIT-компиляцией Numba и другие. См. gh-6509 подробности.
scipy.linalg улучшения#
Функция scipy.linalg.solve получил еще два ключевых слова assume_a и
transposed. Базовые подпрограммы LAPACK заменены на "экспертные"
версии и теперь также могут использоваться для решения систем с симметричными, эрмитовыми и положительно
определенными матрицами коэффициентов. Более того, плохо обусловленные матрицы теперь вызывают
предупреждение с информацией о предполагаемом числе обусловленности. Старые
sym_pos ключевое слово сохраняется по причинам обратной совместимости, однако оно идентично использованию assume_a='pos'. Более того, debug ключевое слово,
которое не имело функции, а только выводило overwrite_ b> значения, устарели.
Функция scipy.linalg.matrix_balance был добавлен для выполнения так называемого
балансирования матрицы с использованием семейства подпрограмм LAPACK xGEBAL. Это может быть использовано для
приблизительного уравнивания норм строк и столбцов с помощью диагональных подобий
преобразований.
Функции scipy.linalg.solve_continuous_are и
scipy.linalg.solve_discrete_are имеют численно более устойчивые алгоритмы. Эти функции также могут решать обобщенные алгебраические матричные уравнения Риккати. Кроме того, обе получили balanced ключевое слово для включения и выключения балансировки.
scipy.spatial улучшения#
scipy.spatial.SphericalVoronoi.sort_vertices_of_regions был переписан на
Cython для повышения производительности.
scipy.spatial.SphericalVoronoi может обрабатывать > 200 тыс. точек (как минимум 10 миллионов)
и имеет улучшенную производительность.
Функция scipy.spatial.distance.directed_hausdorff был добавлен для вычисления направленного расстояния Хаусдорфа.
count_neighbors метод scipy.spatial.cKDTree получил возможность
выполнять взвешенный парный подсчет через новые ключевые слова weights и
cumulative. См. gh-5647 для подробностей.
scipy.spatial.distance.pdist и scipy.spatial.distance.cdist теперь поддерживает
нестандартные метрики не типа double.
scipy.ndimage улучшения#
API функции обратного вызова поддерживает PyCapsules в Python 2.7
Многомерные фильтры теперь позволяют иметь разные режимы экстраполяции для разных осей.
scipy.optimize улучшения#
The scipy.optimize.basinhopping глобальный минимизатор получил новый ключевой аргумент,
seed, который можно использовать для инициализации генератора случайных чисел и получения
воспроизводимых минимизаций.
Ключевое слово sigma в scipy.optimize.curve_fit был перегружен, чтобы также принимать
ковариационную матрицу ошибок в данных.
scipy.signal улучшения#
Функция scipy.signal.correlate и scipy.signal.convolve имеют новый
необязательный параметр метод. Значение по умолчанию для auto оценивает самый быстрый из двух методов вычисления: прямой подход и подход с преобразованием Фурье.
Добавлена новая функция для выбора метода свёртки/корреляции,
scipy.signal.choose_conv_method что может быть полезно, если свёртки или
корреляции выполняются для многих массивов одинакового размера.
Добавлены новые функции для вычисления комплексных кратковременных преобразований Фурье
входного сигнала и для инвертирования преобразования для восстановления
исходного сигнала: scipy.signal.stft и scipy.signal.istft. Эта реализация также исправляет ранее некорректный вывод
scipy.signal.spectrogram когда запрашивались комплексные выходные данные.
Функция scipy.signal.sosfreqz был добавлен
для вычисления частотной характеристики из секций второго порядка.
Функция scipy.signal.unit_impulse был добавлен для удобного
генерирования импульсной функции.
Функция scipy.signal.iirnotch был добавлен для проектирования фильтров-пробок второго порядка IIR, которые могут использоваться для удаления частотной компоненты из сигнала. Двойственная функция scipy.signal.iirpeak был добавлен для
вычисления коэффициентов фильтра второго порядка IIR пика (резонансного).
Функция scipy.signal.minimum_phase был добавлен для преобразования КИХ-фильтров с линейной фазой в фильтры с минимальной фазой.
Функции scipy.signal.upfirdn и scipy.signal.resample_poly теперь
значительно быстрее при работе с некоторыми n-мерными массивами, когда n > 1.
Наибольшее сокращение времени вычислений достигается в случаях, когда размер
массива мал (<1k выборок или около того) вдоль оси, которую нужно фильтровать.
scipy.fftpack улучшения#
Быстрое преобразование Фурье теперь принимает np.float16 входные данные и повышают их тип до np.float32. Ранее они вызывали ошибку.
scipy.cluster улучшения#
Методы "centroid" и "median" of scipy.cluster.hierarchy.linkage
были значительно ускорены. Долгосрочные проблемы с использованием linkage на
больших входных данных (более 16 ГБ) были устранены.
scipy.sparse улучшения#
Функции scipy.sparse.save_npz и scipy.sparse.load_npz были добавлены,
предоставляя простую сериализацию для некоторых разреженных форматов.
The prune метод классов bsr_matrix, csc_matrix, и csr_matrix был обновлен для перераспределения резервных массивов при определенных условиях, уменьшая использование памяти.
Методы argmin и argmax были добавлены в классы coo_matrix, csc_matrix, csr_matrix, и bsr_matrix.
Новая функция scipy.sparse.csgraph.structural_rank вычисляет структурный ранг графа с заданной структурой разреженности.
Новая функция scipy.sparse.linalg.spsolve_triangular решает разреженную линейную
систему с треугольной матрицей левой части.
scipy.special улучшения#
Скалярные типизированные версии универсальных функций из scipy.special доступны
в пространстве Cython через cimport из нового модуля
scipy.special.cython_special. Эти скалярные функции могут быть значительно быстрее универсальных функций для скалярных аргументов. См. scipy.special подробности см. в учебном пособии.
Лучший контроль над ошибками специальных функций предлагается
функциями scipy.special.geterr и scipy.special.seterr и
контекстный менеджер scipy.special.errstate.
Имена функций корней ортогональных полиномов были изменены для согласованности с другими функциями, связанными с ортогональными полиномами. Например, scipy.special.j_roots был переименован
scipy.special.roots_jacobi для согласованности с родственными функциями scipy.special.jacobi и scipy.special.eval_jacobi. Для
сохранения обратной совместимости старые имена оставлены как псевдонимы.
Функция Райта Омега реализована как scipy.special.wrightomega.
scipy.stats улучшения#
Функция scipy.stats.weightedtau был добавлен. Он предоставляет взвешенную
версию тау Кендалла.
Новый класс scipy.stats.multinomial реализует мультиномиальное распределение.
Новый класс scipy.stats.rv_histogram создает непрерывное одномерное распределение с кусочно-линейной функцией распределения из выборки сгруппированных данных.
Новый класс scipy.stats.argus реализует распределение Argus.
scipy.interpolate улучшения#
Новый класс scipy.interpolate.BSpline представляет сплайны. BSpline объекты
содержат узлы и коэффициенты и могут вычислять сплайн. Формат
совместим с FITPACK, так что можно сделать, например:
>>> t, c, k = splrep(x, y, s=0)
>>> spl = BSpline(t, c, k)
>>> np.allclose(spl(x), y)
spl* функции, scipy.interpolate.splev, scipy.interpolate.splint,
scipy.interpolate.splder и scipy.interpolate.splantider, принимает оба
BSpline объекты и (t, c, k) кортежи для обратной совместимости.
Для многомерных сплайнов, c.ndim > 1, BSpline объекты согласованы с кусочно-полиномиальными функциями, scipy.interpolate.PPoly#8568
BSpline объекты не сразу согласуются с
scipy.interpolate.splprep, и один не может делать
>>> BSpline(*splprep([x, y])[0])#22453 scipy.interpolate набор тестов
для примеров точной эквивалентности.
В новом коде предпочтительно использовать scipy.interpolate.BSpline объектами вместо манипулирования (t, c, k) кортежи напрямую.
Новая функция scipy.interpolate.make_interp_spline строит интерполяционный
сплайн по заданным точкам данных и граничным условиям.
Новая функция scipy.interpolate.make_lsq_spline строит сплайн-аппроксимацию методом наименьших квадратов
по заданным точкам данных.
scipy.integrate улучшения#
Теперь scipy.integrate.fixed_quad поддерживает векторные функции.
Устаревшие функции#
scipy.interpolate.splmake, scipy.interpolate.spleval и scipy.interpolate.spline устарели. Формат, используемый splmake/spleval был несовместим с splrep/splev что сбивало пользователей с толку.
scipy.special.errprint устарел. Улучшенная функциональность
доступна в scipy.special.seterr.
вызов scipy.spatial.distance.pdist или scipy.spatial.distance.cdist с аргументами, не требуемыми выбранной метрикой, устарело. Также метрики
“old_cosine” и “old_cos” устарели.
Обратно несовместимые изменения#
Устаревший scipy.weave подмодуль был удалён.
scipy.spatial.distance.squareform теперь возвращает массивы того же типа данных, что и
входные данные, вместо всегда float64.
scipy.special.errprint теперь возвращает логическое значение.
Функция scipy.signal.find_peaks_cwt теперь возвращает массив вместо
списка.
scipy.stats.kendalltau теперь вычисляет правильное p-значение в случае, если
входные данные содержат связи. P-значение также идентично вычисленному с помощью
scipy.stats.mstats.kendalltau и R. Если входные данные не
содержат совпадений, изменений по сравнению с предыдущей реализацией нет.
Функция scipy.linalg.block_diag больше не будет игнорировать матрицы нулевого размера.
Вместо этого он будет вставлять строки или столбцы нулей соответствующего размера.
См. gh-4908 для подробностей.
Прочие изменения#
Колёса SciPy теперь будут сообщать о своей зависимости от numpy на всех платформах.
Это изменение было сделано потому, что доступны колеса Numpy, и потому что поведение
обновления pip наконец меняется к лучшему (используйте
--upgrade-strategy=only-if-needed для pip >= 8.2; это поведение станет значением по умолчанию в следующей основной версии pip).
Числовые значения, возвращаемые scipy.interpolate.interp1d с kind="cubic"
и "quadratic" могут измениться относительно предыдущих версий scipy. Если ваш
код зависел от конкретных числовых значений (т.е., от деталей реализации
интерполяторов), возможно, вы захотите перепроверить свои результаты.