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.bmatsparse.vstack: разреженная версияnumpy.vstacksparse.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=objectloadmatбольше не сжимает одноэлементные измерения, т.е.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).