SciPy 0.7.0 Release Notes#

SciPy 0.7.0 — это результат 16 месяцев напряженной работы. Он содержит много новых функций, множество исправлений ошибок, улучшенное покрытие тестами и лучшую документацию. В этом выпуске было несколько устареваний и изменений API, которые задокументированы ниже. Всем пользователям рекомендуется обновиться до этого выпуска, так как в нем большое количество исправлений ошибок и оптимизаций. Более того, наше внимание в разработке теперь переключится на выпуски исправлений ошибок в ветке 0.7.x и на добавление новых функций в основной ветке разработки. Этот выпуск требует Python 2.4 или 2.5 и NumPy 1.2 или выше.

Обратите внимание, что SciPy все еще считается имеющим статус "Бета", поскольку мы работаем над выпуском SciPy 1.0.0. Выпуск 1.0.0 станет важной вехой в разработке SciPy, после чего изменение структуры пакета или API станет намного сложнее. Хотя эти пред-1.0 выпуски считаются имеющими статус "Бета", мы стремимся сделать их максимально свободными от ошибок. Например, в дополнение к исправлению многочисленных ошибок в этом выпуске, мы также удвоили количество модульных тестов с момента последнего выпуска.

Однако до выпуска версии 1.0 мы активно пересматриваем и уточняем функциональность, организацию и интерфейс. Это делается в рамках усилий сделать пакет максимально последовательным, интуитивно понятным и полезным. Для достижения этой цели нам нужна помощь сообщества пользователей. В частности, нам нужны отзывы по всем аспектам проекта — абсолютно по всем — от того, какие алгоритмы мы реализуем, до деталей сигнатур вызова наших функций.

За последний год мы наблюдали быстрый рост вовлечённости сообщества и многочисленные улучшения инфраструктуры для снижения барьера для вкладов (например, более явные стандарты кодирования, улучшенная тестовая инфраструктура, лучшие инструменты документации). В течение следующего года мы надеемся, что эта тенденция продолжится, и приглашаем всех стать более вовлечёнными.

Python 2.6 и 3.0#

Значительная работа была проделана для обеспечения совместимости SciPy с Python 2.6; однако, в этом отношении всё ещё есть некоторые проблемы. Основная проблема с поддержкой 2.6 — это NumPy. На UNIX (включая Mac OS X) NumPy 1.2.1 в основном работает, с несколькими оговорками. На Windows есть проблемы, связанные с процессом компиляции. Предстоящий выпуск NumPy 1.3 исправит эти проблемы. Любые оставшиеся проблемы с поддержкой 2.6 для SciPy 0.7 будут решены в выпуске с исправлениями ошибок.

Python 3.0 не поддерживается вообще; для него требуется портирование NumPy на Python 3.0. Это требует огромных усилий, поскольку необходимо портировать много кода на C. Переход на 3.0 всё ещё рассматривается; в настоящее время у нас нет никаких сроков или плана для этого перехода.

Значительные улучшения документации#

Документация SciPy значительно улучшена; вы можете просмотреть HTML-справочное руководство онлайн или скачайте его в формате PDF. Новое справочное руководство было создано с использованием популярного Инструмент Sphinx.

Этот выпуск также включает обновленное руководство, которое не было доступно с тех пор, как SciPy был портирован на NumPy в 2005 году. Хотя и не исчерпывающее, руководство показывает, как использовать несколько важных частей Scipy. Оно также включает ndimage documentation from the numarray manual.

Тем не менее, требуется больше усилий на фронте документации. К счастью, внесение вклада в документацию Scipy теперь проще, чем раньше: если вы обнаружите, что какая-то её часть требует улучшений, и хотите помочь нам, пожалуйста, зарегистрируйте имя пользователя в нашем веб-редакторе документации по адресу https://docs.scipy.org/ и исправить проблемы.

Запуск тестов#

NumPy 1.2 представил новую тестовую среду на основе nose. Начиная с этого выпуска, SciPy теперь использует новую тестовую среду NumPy. Использование преимуществ новой тестовой среды требует nose версия 0.10 или выше. Одно из главных преимуществ новой структуры — то, что она значительно упрощает написание модульных тестов — что уже принесло пользу, учитывая быстрое увеличение количества тестов. Чтобы запустить полный набор тестов:

>>> import scipy
>>> scipy.test('full')

Для получения дополнительной информации см. Руководство по тестированию NumPy/SciPy.

Мы также значительно улучшили покрытие тестами. В релизе 0.6.0 было чуть более 2 000 модульных тестов; этот релиз почти удваивает это число, с чуть более 4 000 модульных тестов.

Сборка SciPy#

Добавлена поддержка NumScons. NumScons — это экспериментальная новая система сборки для NumPy/SciPy, использующая SCons в его основе.

SCons — это система сборки следующего поколения, предназначенная для замены почтенной Make с интегрированной функциональностью autoconf/automake и ccache. Scons написан на Python, и его конфигурационные файлы являются скриптами Python. NumScons предназначен для замены пользовательской версии NumPy distutils предоставляя более продвинутый функционал, такой как autoconf, улучшенная поддержка Fortran, больше инструментов и поддержка numpy.distutils/scons совместная работа.

Песочница удалена#

При портировании SciPy в NumPy в 2005 году несколько пакетов и модулей были перемещены в scipy.sandbox. Песочница была промежуточной площадкой для пакетов, которые проходили активную разработку и чьи API были в состоянии изменений. Это также было местом, где мог находиться сломанный код. Песочница хорошо выполнила свою задачу, но начала создавать путаницу. Поэтому scipy.sandbox был удалён. Большая часть кода была перемещена в scipy, часть кода была преобразована в scikit, и оставшийся код был просто удалён, так как функциональность была заменена другим кодом.

Разреженные матрицы#

Разреженные матрицы получили значительные улучшения. Теперь поддерживаются целочисленные типы данных, такие как int8, uint32, и т.д. Были добавлены два новых разреженных формата:

  • новый класс dia_matrix : разреженный формат DIAgonal

  • новый класс bsr_matrix : формат Block CSR

Было добавлено несколько новых функций создания разреженных матриц:

  • sparse.kron : разреженное произведение Кронекера

  • sparse.bmat : разреженная версия numpy.bmat

  • sparse.vstack : разреженная версия numpy.vstack

  • sparse.hstack : разреженная версия numpy.hstack

Добавлено извлечение подматриц и ненулевых значений:

  • sparse.tril : извлечь нижний треугольник

  • sparse.triu : извлечь верхний треугольник

  • sparse.find : ненулевые значения и их индексы

csr_matrix и csc_matrix теперь поддерживают срезы и расширенное индексирование (например, A[1:3, 4:7] и A[[3,2,6,8],:]). Преобразования между всеми разреженными форматами теперь возможны:

  • используя функции-члены, такие как .tocsr() и .tolil()

  • используя .asformat() функция-член, например, A.asformat('csr')

  • используя конструкторы A = lil_matrix([[1,2]]); B = csr_matrix(A)

Все конструкторы разреженных матриц теперь принимают плотные матрицы и списки списков. Например:

  • A = csr_matrix( rand(3,3) ) и B = lil_matrix( [[1,2],[3,4]] )

Обработка диагоналей в spdiags функция была изменена. Теперь она согласуется с функцией MATLAB(TM) с тем же именем.

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

Пакет статистики#

Статистические функции для маскированных массивов были добавлены и доступны через scipy.stats.mstats. Функции похожи на их аналоги в scipy.stats но они ещё не проверены на идентичные интерфейсы и алгоритмы.

Исправлено несколько ошибок для статистических функций, среди них, kstest и percentileofscore получили новые ключевые аргументы.

Добавлено предупреждение об устаревании для mean, median, var, std, cov, и corrcoef. Эти функции следует заменить их аналогами из numpy. Однако обратите внимание, что некоторые параметры по умолчанию различаются между scipy.stats и numpy версии этих функций.

Многочисленные исправления ошибок в stats.distributions: все общие методы теперь работают корректно, несколько методов в отдельных распределениях были исправлены. Однако остаются некоторые проблемы с высшими моментами (skew, kurtosis) и энтропия. Оценка максимального правдоподобия, fit, не работает из коробки для некоторых распределений - в некоторых случаях начальные значения должны быть тщательно выбраны, в других случаях общая реализация метода максимального правдоподобия может не быть численно подходящим методом оценки.

Мы ожидаем больше исправлений ошибок, повышения численной точности и улучшений в следующем релизе scipy.

Переработка пакета IO#

Код ввода-вывода в NumPy и SciPy активно перерабатывается. NumPy будет содержать базовый код для чтения и записи массивов NumPy, в то время как SciPy будет содержать средства чтения и записи файлов для различных форматов данных (данные, аудио, видео, изображения, matlab и т.д.).

Несколько функций в scipy.io были устаревшими и будут удалены в выпуске 0.8.0, включая npfile, save, load, create_module, create_shelf, objload, objsave, fopen, read_array, write_array, fread, fwrite, bswap, packbits, unpackbits, и convert_objectarray. Некоторые из этих функций были заменены возможностями NumPy для чтения и записи сырых данных, отображения в памяти или методами массивов. Другие были перемещены из SciPy в NumPy, поскольку базовая возможность чтения и записи массивов теперь обрабатывается NumPy.

Читатели/писатели файлов Matlab (TM) имеют ряд улучшений:

  • версия по умолчанию 5

  • v5 writers для структур, массивов ячеек и объектов

  • Читатели/писатели v5 для обработчиков функций и 64-битных целых чисел

  • новый аргумент ключевого слова struct_as_record для loadmatкоторый загружает структурированные массивы в matlab как массивы записей в numpy

  • строковые массивы имеют dtype='U...' вместо dtype=object

  • loadmat больше не сжимает одноэлементные измерения, т.е. squeeze_me=False по умолчанию

Новый модуль иерархической кластеризации#

Этот модуль добавляет новую функциональность иерархической кластеризации в scipy.cluster пакет. Интерфейсы функций похожи на функции, предоставляемые Statistics Toolbox MATLAB(TM), чтобы облегчить миграцию в среду NumPy/SciPy. Реализованные методы связывания включают single, complete, average, weighted, centroid, median и ward.

Кроме того, предоставлены несколько функций для вычисления статистики несоответствия, копенетического расстояния и максимального расстояния между потомками. fcluster и fclusterdata функции преобразуют иерархическую кластеризацию в набор плоских кластеров. Поскольку эти плоские кластеры генерируются путем разрезания дерева на лес деревьев, leaders функция принимает связь и плоскую кластеризацию, и находит корень каждого дерева в лесу. Функция ClusterNode класс представляет иерархическую кластеризацию как объект дерева с навигацией по полям. to_tree преобразует матрично-закодированную иерархическую кластеризацию в ClusterNode объект. Предоставлены процедуры для преобразования между кодировками связей MATLAB и SciPy. Наконец, dendrogram функция строит иерархические кластеризации в виде дендрограммы, используя matplotlib.

Новый пакет Spatial#

Новый пространственный пакет содержит коллекцию пространственных алгоритмов и структур данных, полезных для пространственной статистики и кластеризации. Он включает быстро компилируемый код для вычисления точных и приближённых ближайших соседей, а также чистый Python kd-tree с тем же интерфейсом, но поддерживающий аннотации и множество других алгоритмов. API для обоих модулей может несколько измениться, по мере прояснения требований пользователей.

Он также включает distance модуль, содержащий набор функций расстояния и несходства для вычисления расстояний между векторами, что полезно для пространственной статистики, кластеризации и kd-деревьев. Предоставленные функции расстояния и несходства включают Брея-Кертиса, Канберру, Чебышева, городской квартал, косинусное, Дайса, евклидово, Хэмминга, Жаккара, Кульсинского, Махаланобиса, совпадения, Минковского, Роджерса-Танимото, Рассела-Рао, квадратное евклидово, стандартизированное евклидово, Сокала-Миченера, Сокала-Снита и Юла.

The pdist функция вычисляет попарное расстояние между всеми неупорядоченными парами векторов в наборе векторов. cdist вычисляет расстояние между всеми парами векторов в декартовом произведении двух наборов векторов. Матрицы попарных расстояний хранятся в сжатой форме; сохраняется только верхний треугольник. squareform преобразует матрицы расстояний между квадратной и сжатой формами.

Переработанный пакет fftpack#

Обёртки FFTW2, FFTW3, MKL и DJBFFT были удалены. Остался только (NETLIB) fftpack. Сосредоточившись на одном бэкенде, мы надеемся легче добавлять новые функции — например, поддержку float32.

Новый пакет Constants#

scipy.constants предоставляет коллекцию физических констант и коэффициентов преобразования. Эти константы взяты из CODATA Recommended Values of the Fundamental Physical Constants: 2002. Их можно найти на physics.nist.gov/constants. Значения хранятся в словаре physical_constants как кортеж, содержащий значение, единицы измерения и относительную точность - в таком порядке. Все константы указаны в единицах СИ, если не указано иное. Предоставлено несколько вспомогательных функций.

Новый модуль радиальных базисных функций#

scipy.interpolate теперь содержит модуль радиальных базисных функций. Радиальные базисные функции могут использоваться для сглаживания/интерполяции разрозненных данных в n-измерениях, но их следует использовать с осторожностью для экстраполяции за пределами наблюдаемого диапазона данных.

Новый комплексный интегратор ОДУ#

scipy.integrate.ode теперь содержит обертку для ZVODE решателя комплекснозначных обыкновенных дифференциальных уравнений (авторы: Питер Н. Браун, Алан К. Хиндмарш и Джордж Д. Бирн).

Новый решатель обобщённой симметричной и эрмитовой проблемы собственных значений#

scipy.linalg.eigh теперь содержит обертки для большего количества решателей LAPACK для симметричных и эрмитовых задач на собственные значения. Пользователи теперь могут решать обобщенные задачи, выбирать только диапазон собственных значений и выбирать использование более быстрого алгоритма за счет увеличения использования памяти. Сигнатура scipy.linalg.eigh изменено соответствующим образом.

Исправления ошибок в пакете интерполяции#

Форма возвращаемых значений из scipy.interpolate.interp1d ранее был некорректным, если интерполированные данные имели более 2 измерений и ключевое слово axis было установлено в нестандартное значение. Это исправлено. Кроме того, interp1d теперь возвращает скаляр (0D-массив), если входные данные являются скаляром. Пользователи scipy.interpolate.interp1d может потребоваться пересмотреть свой код, если он полагается на предыдущее поведение.

Очистка Weave#

Были многочисленные улучшения в scipy.weave. blitz++ были перелицензированы автором для совместимости с лицензией SciPy. wx_spec.py был удалён.

Известные проблемы#

Известные проблемы с scipy 0.7.0:

  • сбои тестов weave на windows: они известны и пересматриваются.

  • сбой теста weave с gcc 4.3 (std::labs): это ошибка gcc 4.3. Обходной путь — добавить #include в scipy/weave/blitz/blitz/funcs.h (строка 27). Вы можете внести изменение в установленный scipy (в site-packages).