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.