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.solve
. Они похожи, но последний предлагает некоторые дополнительные функции над первым.
Почему очевидное дублирование? Если это предназначено для оптового импорта numpy
в пространство имен scipy
, почему тонкие различия в поведении и недостающие функции? Есть ли какая-то всеобъемлющая логика, которая поможет устранить путаницу?
[1] numpy.min
, numpy.max
, numpy.abs
, а некоторые другие не имеют аналогов в пространстве имен scipy
.
[2] Протестировано с использованием numpy
1.5.1 и scipy
0.9.0rc2.