Связь между SciPy и NumPy

SciPy предоставляет большинство (но не все [1]) функций NumPy в собственном пространстве имен. Другими словами, если есть функция с именем numpy.foo , почти наверняка существует scipy.foo . В большинстве случаев они кажутся совершенно одинаковыми, часто даже указывающими на один и тот же функциональный объект.

Иногда они разные. Приведу недавно появившийся пример:

  • numpy.log10 - это ufunc , который возвращает NaN для отрицательных аргументов;
  • scipy. log10 возвращает комплексные значения для отрицательных аргументов и не является функцией ufunc.

То же самое можно сказать о log , log2 и logn , но не о log1p [2].

С другой стороны, numpy.exp и scipy.exp кажутся разными именами для одного и того же ufunc . Это также верно для scipy.log1p и numpy.log1p .

Другой пример - numpy.linalg.solve vs scipy.linalg. решить . Они похожи, но последний предлагает некоторые дополнительные функции по сравнению с первым.

Почему очевидное дублирование? Если предполагается, что это будет массовый импорт numpy в пространство имен scipy , почему тонкие различия в поведении и недостающие функции? Есть ли какая-то всеобъемлющая логика, которая поможет устранить путаницу?

[1] numpy.min , numpy.max , numpy.abs и некоторые другие не имеют аналогов в пространство имен scipy .

[2] Протестировано с использованием NumPy 1.5.1 и SciPy 0.9.0rc2.

243
задан 13 revs, 2 users 88% 3 August 2018 в 15:34
поделиться