Примечания к выпуску SciPy 0.8.0#
SciPy 0.8.0 — это результат 17 месяцев напряжённой работы. Он содержит множество новых функций, многочисленные исправления ошибок, улучшенное покрытие тестами и лучшую документацию. В этом выпуске было несколько устареваний и изменений API, которые задокументированы ниже. Всем пользователям рекомендуется обновиться до этого выпуска, так как в нём большое количество исправлений ошибок и оптимизаций. Более того, наше внимание разработчиков теперь переключится на выпуски исправлений ошибок в ветке 0.8.x и на добавление новых функций в основной ветке разработки. Этот выпуск требует Python 2.4 - 2.6 и NumPy 1.4.1 или выше.
Обратите внимание, что SciPy всё ещё считается имеющим статус «Бета», так как мы работаем над выпуском SciPy 1.0.0. Выпуск 1.0.0 станет важной вехой в развитии SciPy, после которой изменение структуры пакета или API станет гораздо сложнее. Хотя эти предварительные выпуски до 1.0 считаются имеющими статус «Бета», мы стремимся сделать их максимально свободными от ошибок.
Однако до выпуска версии 1.0 мы активно пересматриваем и уточняем функциональность, организацию и интерфейс. Это делается в рамках усилий сделать пакет максимально последовательным, интуитивно понятным и полезным. Для достижения этой цели нам нужна помощь сообщества пользователей. В частности, нам нужны отзывы по всем аспектам проекта — абсолютно по всем — от того, какие алгоритмы мы реализуем, до деталей сигнатур вызова наших функций.
Python 3#
Совместимость с Python 3 запланирована и в настоящее время технически осуществима, поскольку Numpy был портирован. Однако, поскольку совместимая с Python 3 версия Numpy 1.5 ещё не выпущена, поддержка Python 3 в Scipy пока не включена в Scipy 0.8. SciPy 0.9, запланированная на осень 2010 года, скорее всего будет включать экспериментальную поддержку Python 3.
Значительные улучшения документации#
Документация SciPy значительно улучшена.
Устаревшие функции#
Обмен входными данными для функций корреляции (scipy.signal)#
Касается correlate, correlate2d, convolve и convolve2d. Если второй вход больше первого, входы меняются местами перед вызовом базовой вычислительной процедуры. Это поведение устарело и будет удалено в scipy 0.9.0.
Устаревший код помечен как устаревший (scipy.misc)#
Модули helpmod, ppimport и pexec из scipy.misc устарели. Они будут удалены из SciPy в версии 0.9.
Дополнительные устаревания#
linalg: Функция solveh_banded в настоящее время возвращает кортеж, содержащий разложение Холецкого и решение линейной системы. В SciPy 0.9 возвращаемым значением будет только решение.
Функция constants.codata.find будет генерировать предупреждение об устаревании. В версии SciPy 0.8.0 в функцию был добавлен ключевой аргумент ‘disp’ со значением по умолчанию ‘True’. В версии 0.9.0 значением по умолчанию будет ‘False’.
The qshape именованный аргумент signal.chirp устарело. Используйте аргумент vertex_zero вместо этого.
Передача коэффициентов полинома в качестве аргумента f0 to signal.chirp устарела. Используйте функцию signal.sweep_poly вместо этого.
The io.recaster вызываются идентично, и вызов
Новые возможности#
Поддержка DCT (scipy.fftpack)#
Добавлены новые реальные преобразования, а именно dct и idct для дискретного косинусного преобразования; доступны типы I, II и III.
Поддержка одинарной точности для функций fft (scipy.fftpack)#
Функции fft теперь могут обрабатывать входные данные одинарной точности: fft(x) вернёт массив одинарной точности, если x имеет одинарную точность.
В настоящее время, для размеров БПФ, которые не являются составными из 2, 3 и 5, преобразование вычисляется внутренне с двойной точностью, чтобы избежать ошибок округления в FFTPACK.
Корреляционные функции теперь реализуют обычное определение (scipy.signal)#
The outputs should now correspond to their matlab and R counterparts, and do what most people expect if the old_behavior=False argument is passed:
correlate, convolve и их двумерные аналоги больше не меняют местами входные данные в зависимости от их относительной формы;
Функции корреляции теперь сопрягают второй аргумент при вычислении скользящих сумм-произведений, что соответствует обычному определению корреляции.
Добавления и изменения в функции LTI (scipy.signal)#
Функции impulse2 и шаг2 были добавлены в
scipy.signal. Они используют функцию scipy.signal.lsim2 для вычисления импульсной и переходной характеристики системы, соответственно.Функция scipy.signal.lsim2 был изменён для передачи любых дополнительных аргументов-ключевых слов решателю ОДУ.
Улучшенные генераторы сигналов (scipy.signal)#
Несколько улучшений для чирп функция в scipy.signal были сделаны:
Форма сигнала, генерируемая при method="logarithmic" был исправлен; теперь он генерирует сигнал, также известный как «экспоненциальный» или «геометрический» чирп. (См. https://en.wikipedia.org/wiki/Chirp.)
Новый чирп метод, "hyperbolic", был добавлен.
Вместо ключевого слова qshape, чирп теперь использует ключевое слово vertex_zero, булево значение.
чирп больше не обрабатывает произвольный полином. Эта функциональность была перенесена в новую функцию, sweep_poly.
Новая функция, sweep_poly, был добавлен.
Новые функции и другие изменения в scipy.linalg#
Функции cho_solve_banded, circulant, компаньон, адамар и
leslie были добавлены в scipy.linalg.
Функция block_diag был улучшен для приема скалярных и одномерных аргументов, наряду с обычными двумерными аргументами.
Новая функция и изменения в scipy.optimize#
The curve_fit функция была добавлена; она принимает функцию и использует метод нелинейных наименьших квадратов для её подгонки к предоставленным данным.
The leastsq и fsolve функции теперь возвращают массив размера один вместо скаляра при решении для одного параметра.
Новый разреженный решатель методом наименьших квадратов#
The lsqr функция была добавлена в scipy.sparse. Эта процедура находит
решение методом наименьших квадратов для большой, разреженной, линейной системы уравнений.
Разреженное SVD на основе ARPACK#
Наивная реализация SVD для разреженных матриц доступна в scipy.sparse.linalg._eigen.arpack. Она основана на использовании симметричного решателя для , и поэтому может быть не очень точной.
Альтернативное поведение, доступное для scipy.constants.find#
Аргумент ключевого слова disp был добавлен к функции scipy.constants.find,
со значением по умолчанию True. Когда disp является True, поведение
такое же, как в версии Scipy 0.7. Когда False, функция возвращает список ключей вместо их вывода. (В SciPy версии 0.9 значение по умолчанию будет изменено на противоположное.)
Неполные разреженные LU-разложения#
Scipy теперь использует SuperLU версии 4.0, которая поддерживает неполные разреженные LU-разложения. Доступ к ним можно получить через scipy.sparse.linalg.spilu.
Обновление до SuperLU 4.0 также исправляет некоторые известные ошибки.
Более быстрый читатель файлов matlab и изменение поведения по умолчанию#
Мы переписали читатель matlab-файлов на Cython, и теперь он должен читать matlab-файлы примерно с той же скоростью, что и Matlab.
Читатель читает именованные и анонимные функции matlab, но не может записывать их.
До scipy 0.8.0 мы возвращали массивы структур matlab как numpy
объектные массивы, где объекты имеют атрибуты, названные по полям структуры.
Начиная с версии 0.8.0, мы возвращаем структуры matlab как numpy структурированные
массивы. Вы можете получить старое поведение, используя опциональный
struct_as_record=False ключевой аргумент для scipy.io.loadmat и аналогичные функции.
Существует несоответствие в записи matlab файлов: numpy 1D массивы записываются
как векторы-столбцы в matlab 5 файлах и как векторы-строки в
matlab 4 файлах. Мы изменим это в следующей версии, чтобы оба записывали
векторы-строки. Существует FutureWarning при вызове писателя для предупреждения об этом изменении; пока мы предлагаем использовать oned_as='row' ключевой аргумент для scipy.io.savemat и аналогичные функции.
Более быстрое вычисление ортогональных полиномов#
Значения ортогональных полиномов можно вычислить с помощью новых векторизованных функций
в scipy.special: eval_legendre, eval_chebyt, eval_chebyu,
eval_chebyc, eval_chebys, eval_jacobi, eval_laguerre,
eval_genlaguerre, eval_hermite, eval_hermitenorm,
eval_gegenbauer, eval_sh_legendre, eval_sh_chebyt,
eval_sh_chebyu, eval_sh_jacobi. Это быстрее, чем построение полного коэффициента представления полиномов, что ранее было единственным доступным способом.
Обратите внимание, что предыдущие процедуры для ортогональных полиномов теперь также будут использовать эту функцию, когда это возможно.
Функция Ламберта W#
scipy.special.lambertw теперь может использоваться для вычисления функции Ламберта W.
Улучшенная гипергеометрическая функция 2F1#
Реализация scipy.special.hyp2f1 для вещественных параметров была пересмотрена. Новая версия должна давать точные значения для всех вещественных параметров.
Более гибкий интерфейс для интерполяции радиальными базисными функциями#
The scipy.interpolate.Rbf класс теперь принимает вызываемый объект в качестве входных данных для аргумента
"function", в дополнение к встроенным радиальным базисным функциям, которые
можно выбрать с помощью строкового аргумента.
Удалённые возможности#
scipy.stsci: пакет был удален
Модуль scipy.misc.limits был удалён.
scipy.io#
Код ввода-вывода в NumPy и SciPy активно перерабатывается. NumPy будет содержать базовый код для чтения и записи массивов NumPy, в то время как SciPy будет содержать средства чтения и записи файлов для различных форматов данных (данные, аудио, видео, изображения, matlab и т.д.).
Несколько функций в scipy.io удалены в выпуске 0.8.0, включая:
npfile, сохранить, load, create_module, create_shelf,
objload, objsave, fopen, read_array, write_array,
fread, fwrite, bswap, packbits, unpackbits, и
convert_objectarray. Некоторые из этих функций были заменены возможностями NumPy
для чтения и записи raw, возможностями memory-mapping или методами
массивов. Другие были перемещены из SciPy в NumPy, поскольку базовая
возможность чтения и записи массивов теперь обрабатывается NumPy.